>  기사  >  웹 프론트엔드  >  사용자가 입력한 은행 카드 번호를 일치시키는 Luhn 알고리즘

사용자가 입력한 은행 카드 번호를 일치시키는 Luhn 알고리즘

php中世界最好的语言
php中世界最好的语言원래의
2018-03-29 15:55:261967검색

이번에는 사용자가 입력한 은행 카드 번호를 일치시키는 Luhn 알고리즘을 가져왔습니다. Luhn 알고리즘을 사용하여 사용자가 입력한 은행 카드 번호를 일치시킬 때의 주의사항은 무엇입니까? 봐.

개발 중에 더 나은 사용자 경험을 제공하고 서버에 대한 부담을 줄이기 위해 휴대폰 번호, 은행 카드 번호, ID 번호 등 일부 형식 확인을 수행해야 하는 경우가 있습니다.

다음은 다음과 같습니다. 은행카드 번호 입력이 맞는지 확인하는 것입니다. 코드(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:@""]

이 기사의 사례를 읽으신 후 방법을 마스터하셨다고 생각합니다. 더 흥미로운 정보를 보려면 다른 관련 항목에 주목하세요. PHP 중국어 웹사이트의 기사!

추천 자료:

정규식의 퍼지 일치 기능을 구현하는 방법

QQ 번호가 올바르게 입력되었는지 확인하는 정규식

위 내용은 사용자가 입력한 은행 카드 번호를 일치시키는 Luhn 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.