Python을 사용하여 신용 카드 번호 확인

소개



이 기사의 목적은 Python을 사용하여 간단한 신용 카드 유효성 검사기를 작성하는 방법을 설명하는 것입니다. 카드 번호를 확인하는 데 사용되는 알고리즘을 Luhn 알고리즘이라고 합니다.

Luhn의 알고리즘 정보



Luhn 알고리즘은 1954년 독일 컴퓨터 과학자 Hans Peter Luhn이 개발했습니다. "모듈러스 10 알고리즘"으로도 알려진 이 알고리즘은 신용 카드 번호를 포함한 다양한 식별 번호의 유효성을 검사하는 데 사용되는 체크섬 공식입니다.

대부분의 신용 카드와 많은 정부 식별 번호는 유효한 숫자를 잘못 입력되었거나 잘못된 숫자와 구별하는 간단한 방법으로 알고리즘을 사용합니다. 암호학적으로 안전한 해시 함수가 아닙니다. 대신 악의적인 공격을 방어하기보다는 우발적인 오류를 탐지하기 위해 만들어졌습니다.

알고리즘 작동 방식


  • Luhn 알고리즘은 검사 숫자라고 하는 마지막 숫자에서 시작합니다. 그런 다음 이 검사 숫자( )에서 왼쪽으로 이동하여 짝수 인덱스에서 모든 숫자의 값을 두 배로 늘립니다.
  • 이 배가 연산의 결과가 9보다 큰 경우(예: 6 × 2 = 12) 결과에서 9를 빼거나(예: 12: 12 − 9 = 3) 결과(예: 12:1 + 2 =3).
  • 이제 모든 숫자의 합계를 구합니다(검사 숫자 포함).
  • 합계가 10으로 나누어지면 숫자가 유효합니다. 그렇지 않으면 유효하지 않습니다.

  • Python을 사용하여 Luhn의 알고리즘 구현



    아래 솔루션은 확인할 신용 카드 번호를 나타내는 'credit_number'라는 문자열 인수를 사용합니다. 아래 의사 코드는 각 코드 줄에 대해 수행된 단계를 설명하는 데 도움이 됩니다.

    의사 코드


  • 문자열을 목록 데이터 유형으로 변경
  • 마지막 숫자 제거(검사 숫자)
  • 나머지 자릿수 반전
  • 짝수 인덱스의 두 자릿수
  • 9보다 크면 9 빼기
  • 체크 디지트를 목록에 다시 추가합니다.
  • 모든 자릿수 합계
  • 합계가 10으로 나누어지면 유효합니다. 그렇지 않으면 무효

  • def validate_credit_card(card_number: str) -> bool:
        """This function validates a credit card number."""
        # 1. Change datatype to list[int]
        card_number = [int(num) for num in card_number]
    
        # 2. Remove the last digit:
        checkDigit = card_number.pop(-1)
    
        # 3. Reverse the remaining digits:
        card_number.reverse()
    
        # 4. Double digits at even indices
        card_number = [num * 2 if idx % 2 == 0
                       else num for idx, num in enumerate(card_number)]
    
        # 5. Subtract 9 at even indices if digit is over 9
        # (or you can add the digits)
        card_number = [num - 9 if idx % 2 == 0 and num > 9
                       else num for idx, num in enumerate(card_number)]
    
        # 6. Add the checkDigit back to the list:
        card_number.append(checkDigit)
    
        # 7. Sum all digits:
        checkSum = sum(card_number)
    
        # 8. If checkSum is divisible by 10, it is valid.
        return checkSum % 10 == 0
    
    
    if __name__ == '__main__':
        # American Express
        print(validate_credit_card('378282246310005'))  # True
        print(validate_credit_card('371449635398431'))  # True
        # American Express Corporate
        print(validate_credit_card('378734493671000'))  # True
        # Australian BankCard
        print(validate_credit_card('5610591081018250'))  # True
        # Diners Club
        print(validate_credit_card('30569309025904'))  # True
        print(validate_credit_card('38520000023237'))  # True
        # Discover
        print(validate_credit_card('6011111111111117'))  # True
        print(validate_credit_card('6011000990139424'))  # True
        # MasterCard
        print(validate_credit_card('5555555555554444'))  # True
        print(validate_credit_card('5105105105105100'))  # True
        # Visa
        print(validate_credit_card('4111111111111111'))  # True
        print(validate_credit_card('4012888888881881'))  # True
    
        # Invalid Credit Card Number
        print(validate_credit_card('7762888103111881'))  # False
        print(validate_credit_card('37612555227841800'))  # False
    


    이것은 Python을 사용하여 간단한 신용 카드 유효성 검사기를 구현하는 방법에 대한 하나의 솔루션입니다. credit card validator을 사용하여 번호의 유효성을 확인할 수 있습니다.

    소프트웨어 응용 프로그램에 Luhn 기반 식별 번호 확인을 더 쉽게 포함할 수 있도록 다운로드할 수 있는 사용 가능한 Python 라이브러리가 있습니다.
  • luhn
  • fast-luhn

  • 결론



    이 기사에서는 Luhn 알고리즘과 Python을 사용하여 신용 카드 유효성 검사기를 구현하는 방법에 대해 설명했습니다. 알고리즘이 어떻게 작동하는지 더 잘 이해하고 Python을 사용하여 자신의 신용 카드 번호 유효성 검사기를 작성할 수 있기를 바랍니다. 이 글이 도움이 되셨거나 질문이 있으시면 댓글을 남겨주세요.


    GitHub에서 사용 가능한 코드

    좋은 웹페이지 즐겨찾기