Heim >Web-Frontend >js-Tutorial >Luhn-Algorithmus zum Abgleichen der von Benutzern eingegebenen Bankkartennummern

Luhn-Algorithmus zum Abgleichen der von Benutzern eingegebenen Bankkartennummern

php中世界最好的语言
php中世界最好的语言Original
2018-03-29 15:55:262050Durchsuche

Dieses Mal präsentiere ich Ihnen den Luhn-Algorithmus zum Abgleichen der vom Benutzer eingegebenen Bankkartennummer ist ein praktischer Fall, werfen wir einen Blick darauf. Um ein besseres Benutzererlebnis zu schaffen und den Druck auf den Server zu verringern, ist es manchmal während der Entwicklung erforderlich, eine Formatüberprüfung für einige wie Mobiltelefonnummern, Bankkartennummern und ID-Nummern durchzuführen

Nachfolgend finden Sie den Code, um festzustellen, ob die Eingabe der Bankkartennummer korrekt ist (Formatüberprüfung basierend auf dem Luhn-Algorithmus):

iOS-Code:

/**
 * 银行卡格式校验
 *
 * @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-Code:

/**
 
 * 匹配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;
 
}

Anhang (Formatierung der Bankkartennummer): Bei der Eingabe der Bankkartennummer fügen wir normalerweise alle 4 Ziffern ein „-“ ein. Ein Format ähnlich „1332-2131-2313-1231-212“ kann erreicht werden mit der folgenden Methode:


Stellen Sie den Proxy von textField ein

- (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;
}
Schließlich erfahren Sie, wie Sie die Bank erhalten Kartennummer, die das Symbol „-“ nicht enthält?

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

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben , und es gibt noch mehr spannende Dinge. Bitte beachten Sie andere verwandte Artikel auf der chinesischen PHP-Website!

Empfohlene Lektüre:

So implementieren Sie die Fuzzy-Matching-Funktion regulärer Ausdrücke


Regulärer Ausdruck zur Überprüfung, ob die qq Nummer ist richtig eingegeben

Das obige ist der detaillierte Inhalt vonLuhn-Algorithmus zum Abgleichen der von Benutzern eingegebenen Bankkartennummern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn