• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

    开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验

    下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验):

    iOS代码:

    /**
    
     * 银行卡格式校验
    
     *
    
     * @param cardNo 银行卡号
    
     *
    
     * @return 
    
     */
    
    + (BOOL) checkCardNo:(NSString*) cardNo{
    
      
    
      
    
      int oddsum = 0;   //奇数求和
    
      int evensum = 0;  //偶数求和
    
      int allsum = 0;
    
      int cardNoLength = (int)[cardNo length];
    
      int lastNum = [[cardNo substringFromIndex:cardNoLength-1] intValue];
    
      
    
      cardNo = [cardNo substringToIndex:cardNoLength - 1];
    
      for (int i = cardNoLength -1 ; i>=1;i--) {
    
        NSString *tmpString = [cardNo substringWithRange:NSMakeRange(i-1, 1)];
    
        int tmpVal = [tmpString intValue];
    
        if (cardNoLength % 2 ==1 ) {
    
          if((i % 2) == 0){
    
            tmpVal *= 2;
    
            if(tmpVal>=10)
    
              tmpVal -= 9;
    
            evensum += tmpVal;
    
          }else{
    
            oddsum += tmpVal;
    
          }
    
        }else{
    
          if((i % 2) == 1){
    
            tmpVal *= 2;
    
            if(tmpVal>=10)
    
              tmpVal -= 9;
    
            evensum += tmpVal;
    
          }else{
    
            oddsum += tmpVal;
    
          }
    
        }
    
      }
    
      
    
      allsum = oddsum + evensum;
    
      allsum += lastNum;
    
      if((allsum % 10) == 0)
    
        return YES;
    
      else
    
        return NO;
    
    }

    Androd代码:

    /**
    
     
    
     * 匹配Luhn算法:可用于检测银行卡卡号
    
     
    
     * @param cardNo
    
     
    
     * @return
    
     
    
     */
    
     
    
    public static boolean matchLuhn(String cardNo) {
    
     
    
      int[] cardNoArr = new int[cardNo.length()];
    
     
    
      for (int i=0; icardNo.length(); i++) {
    
     
    
        cardNoArr[i] = Integer.valueOf(String.valueOf(cardNo.charAt(i)));
    
     
    
      }
    
     
    
      for(int i=cardNoArr.length-2;i>=0;i-=2) {
    
     
    
        cardNoArr[i] = 1;
    
     
    
        cardNoArr[i] = cardNoArr[i]/10 + cardNoArr[i]%10;
    
     
    
      }
    
     
    
      int sum = 0;
    
     
    
      for(int i=0;icardNoArr.length;i++) {
    
     
    
        sum += cardNoArr[i];
    
     
    
      }
    
     
    
      return sum % 10 == 0;
    
     
    
    }

    附(银行卡号格式化):

    在输入银行卡号过程中,通常,我们会每隔4位插入一个"-",类似"1332-2131-2313-1231-212"这种的格式
    可以通过以下方法实现:

    设置textField的代理

    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
    
    {
    
      NSString *text = [textField text];
    
      NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789\b"];
    
      string = [string stringByReplacingOccurrencesOfString:@"-" withString:@""];
    
      if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
    
        return NO;
    
      }
    
      
    
      text = [text stringByReplacingCharactersInRange:range withString:string];
    
      text = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];
    
      
    
      NSString *newString = @"";
    
      while (text.length > 0) {
    
        NSString *subString = [text substringToIndex:MIN(text.length, 4)];
    
        newString = [newString stringByAppendingString:subString];
    
        if (subString.length == 4) {
    
          newString = [newString stringByAppendingString:@"-"];
    
        }
    
        text = [text substringFromIndex:MIN(text.length, 4)];
    
      }
    
      
    
      newString = [newString stringByTrimmingCharactersInSet:[characterSet invertedSet]];
    
      
    
      if (newString.length >= 24) {
    
        return NO;
    
      }
    
      
    
      [textField setText:newString];
    
      
    
      return NO;
    
    }

    最后,怎么获得不包含符号"-"的银行卡号呢?

    [self.textField.text stringByReplacingOccurrencesOfString:@"-" withString:@""]

    以上这篇判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    您可能感兴趣的文章:
    • iOS 中使用正则表达式判断身份证格式及银行卡号格式是否正确(推荐)
    • PHP实现通过Luhn算法校验信用卡卡号是否有效
    • Go语言通过Luhn算法验证信用卡卡号是否有效的方法
    上一篇:正则表达式之零宽断言实例详解【基于PHP】
    下一篇:正则表达式处理图片地址、img标签的方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验) 判断,用户,输入,的,银行,