룬 알고리즘 (Luhn Algorithm)
들어가며
룬 알고리즘(Luhn Algorithm)은 1954년 IBM의 과학자 한스 피터 룬(Hans Peter Luhn)에 의해 개발된 단순한 오류 검출 알고리즘입니다. 주로 신용카드 번호, IMEI 번호 등 다양한 식별 번호의 유효성을 검증하는 데 사용됩니다. 이 글에서는 룬 알고리즘의 작동 원리, 숫자 예시, 코드 예시, 그리고 실생활 적용 사례에 대해 자세히 설명하겠습니다.
룬 알고리즘의 작동 원리
룬 알고리즘은 다음과 같은 단계를 거쳐 유효성을 검증합니다:
- 오른쪽에서 왼쪽으로 모든 자리를 확인합니다.
- 짝수 위치에 있는 숫자(맨 오른쪽 숫자는 1번 위치)를 두 배로 만듭니다. 만약 두 배로 만든 숫자가 9보다 크면 각 자릿수를 더해 한 자릿수로 만듭니다.
- 모든 자리 숫자를 더합니다.
- 총합이 10으로 나누어 떨어지면 유효한 번호입니다.
숫자 예시
예를 들어, "79927398713"이 유효한 번호인지 검증해 보겠습니다.
- 오른쪽에서 왼쪽으로 숫자를 확인합니다: 7 9 9 2 7 3 9 8 7 1 3
- 짝수 위치에 있는 숫자를 두 배로 만듭니다:
- 7, (92=18 -> 1+8=9), 9, (22=4), 7, (32=6), 9, (82=16 -> 1+6=7), 7, (1*2=2), 3
- 결과: 7, 9, 9, 4, 7, 6, 9, 7, 7, 2, 3
- 모든 자리 숫자를 더합니다:
7 + 9 + 9 + 4 + 7 + 6 + 9 + 7 + 7 + 2 + 3 = 70
- 총합 70이 10으로 나누어 떨어지므로 이 번호는 유효합니다.
코드 예시
다음은 파이썬(Python)으로 작성된 룬 알고리즘 구현 예시입니다:
def luhn_algorithm(card_number):
def digits_of(n):
return [int(d) for d in str(n)]
digits = digits_of(card_number)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
checksum = sum(odd_digits)
for d in even_digits:
checksum += sum(digits_of(d * 2))
return checksum % 10 == 0
# 예시 카드 번호
card_number = 79927398713
print(luhn_algorithm(card_number)) # 출력: True
실생활 적용 사례
룬 알고리즘은 주로 신용카드 번호의 유효성을 검증하는 데 사용됩니다. 신용카드 번호는 16자리 숫자로 구성되어 있으며, 마지막 자리는 체크 디지트입니다. 체크 디지트는 나머지 15자리 숫자를 룬 알고리즘에 적용하여 계산된 값입니다. 이는 카드 번호 입력 시 사용자가 실수로 잘못 입력한 경우 즉시 검출할 수 있게 해줍니다.
결론
룬 알고리즘은 단순하면서도 강력한 오류 검출 도구로, 다양한 식별 번호의 유효성을 검증하는 데 널리 사용됩니다. 위의 예시와 같이 간단한 파이썬 코드로 구현할 수 있으며, 실제로 신용카드와 같은 중요한 번호의 유효성을 확인하는 데 사용됩니다.
참고 자료
- Luhn, H. P. (1960). Computer for Verifying Numbers. U.S. Patent 2,950,048.
- Wikipedia contributors. (2023). Luhn algorithm. In Wikipedia, The Free Encyclopedia. Retrieved from https://en.wikipedia.org/wiki/Luhn_algorithm