Luhn Algorithm (youtube.com)

 

일단 나보다 설명을 잘하는 인도아저씨가 나타나 설명을 해주고 있어요

요약


1. Starting from the rightmost digit (the check digit), double the value of every second digit.
2. If doubling a digit results in a number greater than 9, subtract 9 from the product.
3. Sum up all the digits.If the total sum is divisible evenly by 10, then the number is valid according to the Luhn algorithm.


파이썬 코드

 

def verify_card_number(card_number):
    sum_of_odd_digits = 0
    card_number_reversed = card_number[::-1]
    odd_digits = card_number_reversed[::2]

    for digit in odd_digits:
        sum_of_odd_digits += int(digit)

    sum_of_even_digits = 0
    even_digits = card_number_reversed[1::2]
    for digit in even_digits:
        number = int(digit) * 2
        if number >= 10:
            number = (number // 10) + (number % 10)
        sum_of_even_digits += number
    total = sum_of_odd_digits + sum_of_even_digit
    return total % 10 == 0

def main():
    card_number = '4111-1111-4555-1141'
    card_translation = str.maketrans({'-': '', ' ': ''})
    translated_card_number = card_number.translate(card_translation)

    if verify_card_number(translated_card_number):
        print('VALID!')
    else:
        print('INVALID!')

main()

 

리스트와 딕셔너리의 활용으로 만들어진 알고리즘 풀이

 

 

감상평: 

 

프로그래밍은 수학을 잘하냐 잘 못하느냐가 아니라 문제를 보고 어떻게 식을 만들고 활용하는 영역인거 같음.

 

 

+ Recent posts