2012年9月20日 星期四

[C#]統一編號驗證 Uniform No. Validator

碼數01234567
統一編號00238778
運算x1x2x1x2x1x2x4x1
新值10026814288每個值的十位數與個位數加總直到只剩個位數
新值2002685108
新值30+0+2+6+8+5+1+8=30每個數值加總後可整除10即代表統編正確

protected bool CheckUniformNo(string strCardno)
{
    if (strCardno.Trim().Length < 8)
    {
        return false;
    }
    else
    {
        int[] intTmpVal = new int[6];
        int intTmpSum = 0;
        for (int i = 0; i < 6; i++)
        {
            //位置在奇數位置的*2,偶數位置*1,位置計算從0開始
            if (i % 2 == 1)
                intTmpVal[i] = overTen(int.Parse(strCardno[i].ToString()) * 2);
            else
                intTmpVal[i] = overTen(int.Parse(strCardno[i].ToString()));

            intTmpSum += intTmpVal[i];
        }
        intTmpSum += overTen(int.Parse(strCardno[6].ToString()) * 4); //第6碼*4
        intTmpSum += overTen(int.Parse(strCardno[7].ToString())); //第7碼*1

        if (intTmpSum % 10 != 0) //除以10後餘0表示正確,反之則錯誤
            return false;
    }
    return true;
}
private int overTen(int intVal) //超過10則十位數與個位數相加,直到相加後小於10
{
    if (intVal >= 10)
        intVal = overTen((intVal / 10) + (intVal % 10));
    return intVal;
}

1 則留言:

  1. 留個言 : 第七碼的處理有問題 , 為了不要再出現受害者 XD 來這邊個言~

    回覆刪除