Heim > Artikel > Web-Frontend > Luhn-Algorithmus zum Abgleichen der von Benutzern eingegebenen Bankkartennummern
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:
- (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!