欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

判斷用戶輸入的銀行卡號(hào)是否正確的方法(基于Luhn算法的格式校驗(yàn))

 更新時(shí)間:2017年04月23日 08:53:05   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇判斷用戶輸入的銀行卡號(hào)是否正確的方法(基于Luhn算法的格式校驗(yàn))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

開(kāi)發(fā)中,有時(shí)候,為了打造更好的用戶體驗(yàn),同時(shí)減輕服務(wù)器端的壓力,需要對(duì)于一些如,手機(jī)號(hào)碼,銀行卡號(hào),身份證號(hào)碼進(jìn)行格式校驗(yàn)

下面是判斷銀行卡號(hào)輸入是否正確的代碼(基于Luhn算法的格式校驗(yàn)):

iOS代碼:

/**

 * 銀行卡格式校驗(yàn)

 *

 * @param cardNo 銀行卡號(hào)

 *

 * @return 

 */

+ (BOOL) checkCardNo:(NSString*) cardNo{

  

  

  int oddsum = 0;   //奇數(shù)求和

  int evensum = 0;  //偶數(shù)求和

  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算法:可用于檢測(cè)銀行卡卡號(hào)

 

 * @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;

 

}

附(銀行卡號(hào)格式化):

在輸入銀行卡號(hào)過(guò)程中,通常,我們會(huì)每隔4位插入一個(gè)"-",類似"1332-2131-2313-1231-212"這種的格式
可以通過(guò)以下方法實(shí)現(xiàn):

設(shè)置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;

}

最后,怎么獲得不包含符號(hào)"-"的銀行卡號(hào)呢?

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

以上這篇判斷用戶輸入的銀行卡號(hào)是否正確的方法(基于Luhn算法的格式校驗(yàn))就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論