2012年9月19日 星期三

[C#] 驗證信用卡卡號 Credit Card No. Validator

碼數0123456789101112131415
信用卡卡號3456789012345675
運算x2x1x2x1x2x1x2x1x2x1x2x1x2x1x2x1
新值1641061481802264106145
=>把每個[新值1]的個位數與十位數加總,產生[新值2]
新值26+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;
}

沒有留言:

張貼留言