Maison >interface Web >js tutoriel >Algorithme de Luhn pour faire correspondre les numéros de cartes bancaires saisis par les utilisateurs

Algorithme de Luhn pour faire correspondre les numéros de cartes bancaires saisis par les utilisateurs

php中世界最好的语言
php中世界最好的语言original
2018-03-29 15:55:262069parcourir

Cette fois, je vous présenterai l'algorithme de Luhn pour faire correspondre le numéro de carte bancaire saisi par l'utilisateur. Quelles sont les précautions lors de l'utilisation de l'algorithme de Luhn pour faire correspondre le numéro de carte bancaire saisi par l'utilisateur Ici. est un cas pratique, jetons un coup d'oeil.

Lors du développement, parfois, afin de créer une meilleure expérience utilisateur et de réduire la pression sur le serveur, il est nécessaire d'effectuer une vérification de format sur certains comme les numéros de téléphone portable, les numéros de carte bancaire et les numéros d'identification

Voici le code permettant de déterminer si la saisie du numéro de carte bancaire est correcte (vérification du format basée sur l'algorithme de Luhn) :

Code 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;
}

Code 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;
 
}

Pièce jointe (formatage du numéro de carte bancaire) :

Lors de la saisie du numéro de carte bancaire, on insère généralement un "-" tous les 4 chiffres. Un format similaire à "1332-2131-2313-1231-212"
peut être obtenu. par la méthode suivante :

Définir le proxy de 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;
}

Enfin, comment obtenir la banque numéro de carte qui ne contient pas le symbole "-" ?

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

Je crois que vous maîtrisez la méthode après avoir lu le cas dans cet article , et il y a des choses plus excitantes. Veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Comment implémenter la fonction de correspondance floue des expressions régulières

Expression régulière pour vérifier si le qq le numéro est saisi Correct

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn