碼數 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | |
統一編號 | 0 | 0 | 2 | 3 | 8 | 7 | 7 | 8 | | |
運算 | x1 | x2 | x1 | x2 | x1 | x2 | x4 | x1 | | |
新值1 | 0 | 0 | 2 | 6 | 8 | 14 | 28 | 8 | | 每個值的十位數與個位數加總直到只剩個位數 |
新值2 | 0 | 0 | 2 | 6 | 8 | 5 | 10 | 8 | | |
新值3 | 0 | +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;
}
留個言 : 第七碼的處理有問題 , 為了不要再出現受害者 XD 來這邊個言~
回覆刪除