当前位置: 移动技术网 > IT编程>开发语言>正则 > 判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

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

2017年12月08日  | 移动技术网IT编程  | 我要评论
开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于lu

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

下面是判断银行卡号输入是否正确的代码(基于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; i<cardno.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;i<cardnoarr.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算法的格式校验)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网