碼數 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | | | |
信用卡卡號 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 5 | | | |
運算 | x2 | x1 | x2 | x1 | x2 | x1 | x2 | x1 | x2 | x1 | x2 | x1 | x2 | x1 | x2 | x1 | | | |
新值1 | 6 | 4 | 10 | 6 | 14 | 8 | 18 | 0 | 2 | 2 | 6 | 4 | 10 | 6 | 14 | 5 |
| => | 把每個[新值1]的個位數與十位數加總,產生[新值2] |
新值2 | 6+ | 4+ | 1+ | 6+ | 5+ | 8+ | 9+ | 0+ | 2+ | 2+ | 6+ | 4+ | 1+ | 6+ | 5+ | 5 | =70 | => | 加總每個[新值2]後若可整除10即代表卡號正確 |
protected bool CheckCreditCardNo(string strCardno)
{
if (strCardno.Trim().Length < 16)
{
return false;
}
else
{
int[] intTmpVal = new int[16];
int intTmpSum = 0;
for (int i = 0; i < 16; i++)
{
//位置在奇數位置的*1,偶數位置*2,位置計算從0開始
if (i % 2 == 1)
intTmpVal[i] = int.Parse(strCardno[i].ToString());
else
intTmpVal[i] = int.Parse(strCardno[i].ToString()) * 2;
//以上處理後若結果大於10的將其個位數+十位數
if (intTmpVal[i] >= 10)
intTmpVal[i] = (intTmpVal[i] / 10) + (intTmpVal[i] % 10);
//將所得的所有結果加總
intTmpSum += intTmpVal[i];
}
if (intTmpSum % 10 != 0) //除以10後餘0表示正確,反之則錯誤
return false;
}
return true;
}
沒有留言:
張貼留言