最近的項目中涉及到綁定用戶的銀行卡,借記卡。經過查找銀行卡的校驗規是采用 Luhn算法進行驗證。
Luhn算法,也被稱作“模10算法”。它是一種簡單的校驗公式,一般會被用於身份證號碼,IMEI號碼,美國供應商識別號碼,或是加拿大的社會保險號碼的驗證,主要用來計算信用卡等證件號碼的合法性。
- 從卡號最后一位數字開始,逆向將奇數位(1、3、5等等)相加。
- 從卡號最后一位數字開始,逆向將偶數位數字,先乘以2(如果乘積為兩位數,則將其減去9),再求和。
- 將奇數位總和加上偶數位總和,結果應該可以被10整除。
例如,卡號是:5432123456788881
則奇數、偶數位(逆向奇數位為紅色字體,偶數位為默認字體)分布:5432123456788881
奇數位 4 2 2 4 6 8 8 1 求和=35
偶數位乘以2(若乘積大於9就要減去9)的結果:1 6 2 6 1 5 7 7,求和=35。
最后35+35=70可以被10整除,認定校驗通過。
1 -(BOOL) checkCardNumber:(NSString *) cardNumber{ 2 3 int sum = 0; 4 int len = [cardNumber length]; 5 int i = 0; 6 7 while (i < len) { 8 NSString *tmpString = [cardNo substringWithRange:NSMakeRange(len - 1 - i, 1)]; 9 int tmpVal = [tmpString intValue]; 10 if (i % 2 != 0) { 11 tmpVal *= 2; 12 if(tmpVal>9) { 13 tmpVal -= 9; 14 } 15 } 16 sum += tmpVal; 17 i++; 18 } 19 20 if((sum % 10) == 0) 21 return YES; 22 else 23 return NO; 24 }