Python에서 Luhn 알고리즘을 사용하여 숫자 유효성 검사

Jay Shaw 2023년10월10일
  1. Python에서 Luhn 알고리즘을 사용하여 숫자 유효성 검사
  2. 함수를 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사
  3. 중첩 루프를 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사
  4. 함수형 프로그래밍을 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사
  5. 결론
Python에서 Luhn 알고리즘을 사용하여 숫자 유효성 검사

독일 컴퓨터 과학자 Hans Peter Luhn은 1960년대에 Luhn 알고리즘 공식을 개발했습니다. Visa 및 Master Card와 같은 주요 국제 금융 전자 자금 이체 조직에서 온라인 결제 및 거래 속도를 높이기 위해 사용하는 체크섬 알고리즘입니다.

이 기사는 Luhn 알고리즘을 Python으로 작성하는 방법을 설명하고 알고리즘에 따라 숫자의 유효성을 검사합니다.

Python에서 Luhn 알고리즘을 사용하여 숫자 유효성 검사

Luhn 알고리즘 유효성 검사기는 올바르지 않거나 철자가 틀린 입력에서 적법한 숫자를 검사하고 분리하는 데 도움이 됩니다. 그것에 대해 더 알고 싶다면 이 링크를 확인하세요.

Python에서 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사하는 프로그램을 만드는 방법을 이해해 보겠습니다.

함수를 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사

이 프로그램은 숫자를 가져와 Python의 Luhn 알고리즘을 사용하여 유효성을 검사합니다. 이 프로그램에는 separate_digits(), luhn_algo()check_if_valid의 세 가지 메서드가 있습니다.

단계별 설명:

  1. 첫 번째 코드 라인은 num 매개변수를 사용하여 luhn_algo 메소드를 생성합니다.

  2. 메서드 내부에 또 다른 중첩 메서드 separate_digits()가 생성됩니다. 이 중첩 메서드는 전달된 숫자의 숫자를 구분하고 구분된 숫자를 Python 목록으로 반환합니다.

    이 방법은 for 루프를 사용하여 목록 내의 숫자를 반복합니다.

    def luhn_algo(num):
        def separate_digits(n):
            return [int(d) for d in str(n)]
    
  3. 새 변수 digitsseparate_digits 방법을 사용하여 num 내부의 값을 숫자 목록으로 변환합니다.

    digits = separate_digits(num)
    
  4. 파이썬 리스트에 숫자가 저장되면 리스트를 뒤집어서 짝수와 홀수를 구분해야 합니다. 이것은 슬라이스 연산자 ::를 사용하여 달성됩니다.

    예를 들어 odd_digits = digits[-1::-2] 구문에서 -1::은 목록을 뒤집고 첫 번째 인덱스를 사용합니다.

    ::-2는 첫 번째 인덱스부터 시작하여 모든 두 번째 요소를 선택합니다. 이렇게 하면 홀수 숫자만 포함된 새 목록이 생성됩니다.

    마찬가지로 짝수 목록은 연산자 -2::-2를 사용하여 생성됩니다.

    digits = separate_digits(num)
    odd_digits = digits[-1::-2]
    even_digits = digits[-2::-2]
    
  5. Luhn 알고리즘은 홀수를 합산하고 짝수는 2를 곱한 후 합산합니다.

    짝수의 곱이 9보다 크면 그 자릿수의 합을 더합니다. 마지막으로 모든 홀수와 짝수를 합산합니다.

    모든 숫자를 합산하기 위해 변수 체크섬이 생성됩니다. 홀수 자릿수의 합은 다음 구문을 사용하여 계산됩니다.

    checksum += sum(odd_digits)
    

    짝수 목록을 반복하기 위해 for 루프가 생성됩니다. 이런 식으로 각 숫자에 2를 곱한 다음 separate_digits 방법으로 제품의 숫자를 구분한 다음 합계를 계산합니다.

    마지막으로 checksum 변수에 추가됩니다.

    for d in even_digits:
        checksum += sum(separate_digits(d * 2))
    
  6. Luhn 알고리즘에 의해 유효성이 검사되는 숫자이며 최종 제품은 10으로 나눌 수 있어야 합니다. 결과 값은 메서드 끝에 반환됩니다.

    return checksum % 10
    
  7. Luhn 알고리즘의 결과를 검증하기 위해 num 매개변수를 사용하여 check_if_valid 메소드가 생성됩니다. 메서드는 luhn_algo 메서드에서 반환된 결과가 0인지 여부를 지분 연산자를 사용하여 확인하고 결과를 반환합니다.

    def check_if_valid(num):
        return luhn_algo(num) == 0
    
  8. 결과 인쇄를 위해 check_if_valid 메서드에 숫자가 전달되고 결과가 인쇄됩니다.

암호:

def luhn_algo(num):
    print("Number = ", num)

    def separate_digits(n):
        # Separates digits of num and stores them in a python list
        return [int(d) for d in str(n)]

    digits = separate_digits(num)
    # Creates a new reversed list with just odd digits
    odd_digits = digits[-1::-2]
    # Creates another reversed list with even digits
    even_digits = digits[-2::-2]

    checksum = 0
    checksum += sum(odd_digits)  # Finds sum of odd digits

    for d in even_digits:
        checksum += sum(
            separate_digits(d * 2)
        )  # Multiplies even digits with 2 and sums digits > 9

    return checksum % 10


def check_if_valid(num):
    return luhn_algo(num) == 0


result = check_if_valid(4532015112830366)
print("Correct:" + str(result))
result = check_if_valid(6011514433546201)
print("Correct:" + str(result))
result = check_if_valid(6771549495586802)
print("Correct:" + str(result))

출력:

Number =  4532015112830366
Correct:True
Number =  6011514433546201
Correct:True
Number =  6771549495586802
Correct:True

이렇게 하면 Python의 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사하는 프로그램을 쉽게 만들 수 있습니다.

중첩 루프를 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사

Python에서 Luhn 알고리즘을 통해 숫자의 유효성을 검사하는 또 다른 방법은 중첩 루프를 사용하는 것입니다. 이 프로그램은 단일 함수를 사용하여 Python의 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사합니다.

코드가 어떻게 작동하는지 이해합시다.

  1. 첫 번째 코드 라인은 num 매개변수를 사용하여 luhn_algo 메소드를 생성합니다.

  2. 변수 check_sum이 0으로 초기화됩니다.

    def luhn_algo(num):
        check_sum = 0
    
  3. 변수 num_parity는 주어진 숫자의 길이를 찾고 짝수인지 홀수인지 패리티를 확인합니다.

    num_parity = len(num) % 2
    
  4. 0번째 위치에서 길이까지 역방향으로 실행되는 for 루프가 생성됩니다. l번째 인덱스의 값은 변수 j로 복사 초기화됩니다.

    for l in range(len(num) - 1, -1, -1):
        j = int(num[l])
    
  5. 변수 num_parity가 이 시점에 옵니다. num_parity가 0이면 이는 num이 짝수이고 홀수인 경우 그 반대임을 의미합니다.

    모든 짝수 숫자에 2를 곱해야 하므로 프로그램은 l+1번째 인덱스의 패리티를 확인합니다. 패리티가 0이고 l + 1 % 2가 패리티와 같다고 가정하면 l번째 인덱스가 홀수임을 의미합니다.

    마찬가지로 패리티가 0이고 l + 1 % 2와 같지 않으면 짝수입니다. 이 논리를 사용하여 모든 짝수 자릿수에 2를 곱하고 곱이 9보다 크면 9를 나눕니다.

    check_sum 변수는 j 값으로 자체 증가합니다. 루프 반복의 끝에서 check_sum은 짝수 및 홀수 숫자의 최종 합계를 계산합니다.

    if (l + 1) % 2 != num_parity:
        j = j * 2
        if j > 9:
            j = j - 9
        check_sum = check_sum + j
    
  6. Python에서 Luhn 알고리즘을 사용하여 유효성을 검사하려면 최종 합계를 10으로 나누어야 하는 것으로 알려져 있으므로 함수는 check_sum % 10 == 0을 반환합니다.

암호:

def luhn_algo(num):
    check_sum = 0
    num_parity = len(num) % 2
    for l in range(len(num) - 1, -1, -1):
        j = int(num[l])
        if (l + 1) % 2 != num_parity:
            j = j * 2
        if j > 9:
            j = j - 9
        check_sum = check_sum + j
    print("value calculated = ", str(check_sum))
    return check_sum % 10 == 0


for n in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(str(n) + " =>", luhn_algo(str(n)))

출력:

value calculated =  70
49927398716 => True
value calculated =  71
49927398717 => False
value calculated =  68
1234567812345678 => False
value calculated =  60
1234567812345670 => True

함수형 프로그래밍을 사용하여 Luhn 알고리즘을 통해 숫자 유효성 검사

처음 두 예제는 Python의 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사하는 절차적 방법을 사용했습니다. 이 예제는 함수형 프로그래밍을 사용하여 Python의 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사합니다.

함수형 프로그래밍 방법을 사용하면 프로그래머의 시간과 노력이 절약됩니다. 아래 Python 프로그램은 더 적은 줄의 코드로 숫자의 유효성을 검사합니다.

  1. luhn_algo 메서드는 num 매개변수로 생성됩니다.

  2. 새 변수 rev에서 매개변수 num의 숫자가 목록에 저장됩니다. 이를 위해 num에 있는 자릿수를 반복하는 for 루프가 사용됩니다.

    슬라이싱 연산자 ::-1은 목록 내부의 숫자를 반전시킵니다.

  3. return 문은 전체 작업을 한 번에 계산합니다.

    홀수 숫자의 합은 (sum(rev[0::2]) 구문을 사용하여 계산됩니다. 짝수 숫자는 for 루프(for d in r[1::2])에서 실행됩니다.

    각 숫자에 2를 곱하고 divmod() 함수를 사용하여 제품의 숫자를 더합니다.

    divmod() 함수는 분자와 분모의 두 매개변수를 취하고 몫과 나머지의 두 값을 반환합니다.

    divmod(d * 2, 10) 구문은 d*2를 분자로, 10을 분모로 사용합니다. 결과는 자릿수의 합계를 얻기 위해 더해집니다.

    마지막으로 함수는 최종 합계가 10으로 나누어 떨어지는지 확인하고 결과를 반환합니다.

  4. for 루프를 사용하여 4개의 숫자를 입력하고 결과를 출력합니다.

암호:

def luhn_algo(num):
    rev = [int(ch) for ch in str(num)][::-1]
    return (sum(rev[0::2]) + sum(sum(divmod(d * 2, 10)) for d in rev[1::2])) % 10 == 0


for num2 in (49927398716, 49927398717, 1234567812345678, 1234567812345670):
    print(num2, luhn_algo(num2))

출력:

49927398716 True
49927398717 False
1234567812345678 False
1234567812345670 True

결론

이 기사는 독자가 Python에서 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사하는 방법을 이해할 수 있도록 세 가지 프로그램을 제공합니다.

독자가 기사를 살펴보고 스스로 코드를 작성해보고 힌트를 얻기 위해 다시 돌아올 것을 제안합니다. 이런 식으로 독자는 Luhn 알고리즘을 사용하여 숫자의 유효성을 검사하는 프로그램을 만들 수 있습니다.

관련 문장 - Python Checksum