您的位置:首页 > 移动开发 > IOS开发

iOS 银行卡号合法性判断

2016-11-12 16:25 239 查看
输入银行卡号的时候,一般为了卡号的合法性会做一个判断,百度一下查到了Luhn算法

Luhn算法步骤:

1、从卡号的末位开始,逆向将奇数位相加;

2、从卡号的末位开始,逆向将偶数位先乘2,如果得到的数为两位数则减9,再将得到的数求和;

3、将奇数位的和与偶数位的和相加得到的数除以10,如果可以被10整除,则这个卡号是合法的。

举个栗子:

卡号:6227612145830440(网上搜的)

奇数位的和:0+4+3+5+1+1+7+2=23

偶数位(已经减9)的和:8+0+7+8+4+3+4+3=37

23+37 = 60 可以被10整除,说明这个卡号是合法的。

而且这个算法,我个人测得信用卡(网上找的)和借记卡(周围同事的)都是通过的,说明还是比较靠谱。

下面贴出代码

- (BOOL)checkBankCardNumber:(NSString *)cardNumber
{
int oddSum = 0;     // 奇数和
int evenSum = 0;    // 偶数和
int allSum = 0;     // 总和

// 循环加和
for (NSInteger i = 1; i <= cardNumber.length; i++)
{
NSString *theNumber = [cardNumber substringWithRange:NSMakeRange(cardNumber.length-i, 1)];
int lastNumber = [theNumber intValue];
if (i%2 == 0)
{
// 偶数位
lastNumber *= 2;
if (lastNumber > 9)
{
lastNumber -=9;
}
evenSum += lastNumber;
}
else
{
// 奇数位
oddSum += lastNumber;
}
}
allSum = oddSum + evenSum;
// 是否合法
if (allSum%10 == 0)
{
return YES;
}
else
{
return NO;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 算法 Luhn