iOS 银行卡号合法性判断

输入银行卡号的时候,一般为了卡号的合法性会做一个判断,使用了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;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值