룬 검증 숫자 계산기 쉽게 이해하기 — 개념과 원리
룬(Luhn) 알고리즘은 'mod 10 알고리즘'이라고도 하며, 식별 번호 끝에 검증 숫자 하나를 붙여 입력 실수를 바로 잡아낼 수 있게 하는 방법입니다. 신용카드 번호(ISO/IEC 7812), 휴대폰의 IMEI 번호, 여러 회원·계좌 번호에 쓰입니다. 이 계산기는 입력한 숫자 뒤에 붙일 검증 숫자를 구하고, 입력한 번호가 그 자체로 룬 검사를 통과하는지도 알려 줍니다. 학습과 테스트를 위한 도구이며 카드 번호를 만들어 내는 용도가 아닙니다.
계산 방법
- 검사할 번호의 맨 오른쪽 숫자부터 1, 2, 3… 하고 오른쪽에서 왼쪽으로 자리를 셉니다.
- 짝수 번째 자리의 숫자를 두 배 합니다. 9를 넘으면 9를 뺍니다(16 → 1 + 6 = 7과 같습니다).
- 두 배 한 숫자와 그대로 둔 숫자를 모두 더합니다.
- 합이 10의 배수이면 올바른 번호입니다.
- 새 검증 숫자를 구할 때는 끝에 0을 붙여 합 S를 구한 뒤 (10 − S mod 10) mod 10을 계산합니다.
공백과 하이픈 같은 숫자 아닌 문자는 무시합니다.
원리
'두 배 후 9 빼기'는 0~9를 0, 2, 4, 6, 8, 1, 3, 5, 7, 9로 바꾸는 일대일 대응이라, 숫자 하나가 틀리면 합의 일의 자리가 반드시 달라져 오류가 드러납니다. 가중치를 1과 2로 번갈아 주므로 이웃한 두 숫자가 뒤바뀌어도 대부분 검출됩니다. 놓치는 경우는 09 ↔ 90뿐인데, 두 경우 모두 9를 더하기 때문입니다. 손이나 기계 장치로도 계산할 수 있도록 일부러 단순하게 만든 방식이며, IBM의 H. P. 룬이 1960년에 특허를 받았습니다.
예제 풀이
- 입력은 7992739871입니다.
- 끝에 0을 붙인 79927398710에서 오른쪽부터 두 배 할 숫자는 1, 8, 3, 2, 9이고, 결과 2, 16 → 7, 6, 4, 18 → 9의 합은 28입니다.
- 그대로 둘 숫자 0, 7, 9, 7, 9, 7의 합은 39이므로 S = 67입니다.
- 검증 숫자는 (10 − 67 mod 10) mod 10 = (10 − 7) mod 10 = 3이고, 완성된 번호는 79927398713입니다.
- 입력 자체는 마지막 숫자 1을 검증 숫자로 보고 계산하면 합이 56으로 10의 배수가 아니므로 invalid(올바르지 않음)입니다.
결과 해석
'올바름'은 숫자들이 서로 맞는다는 뜻일 뿐입니다. 아무 숫자나 넣어도 평균 10번에 1번은 통과하므로, 이 검사는 입력 실수를 거르는 장치이지 계좌나 카드가 실제로 존재하는지 알려 주지 않습니다. 올바르지 않다고 나오면 숫자 하나가 틀렸거나, 이웃한 두 숫자가 바뀌었거나, 한 자리가 빠졌을 가능성이 큽니다.
흔한 실수
- 왼쪽부터 두 배 하는 것(자리는 길이에 따라 오른쪽부터 정해집니다)
- 새 검증 숫자를 구할 때 자리 표시용 0을 붙이지 않아 가중치가 모두 어긋나는 것
- 룬 검사를 통과하면 실제 카드라고 생각하는 것
자주 묻는 질문
룬 알고리즘으로 오류를 고칠 수도 있습니까?
아닙니다. 어딘가 틀렸다는 사실만 알려 줄 뿐, 어느 숫자가 틀렸는지는 알 수 없습니다.
숫자 순서가 바뀐 오류는 모두 잡습니까?
이웃한 두 숫자의 교환은 09 ↔ 90만 빼고 모두 잡지만, 떨어진 자리끼리의 교환은 놓칠 수 있습니다.
IMEI 번호에도 쓰입니까?
네. IMEI의 15번째 숫자가 앞 14자리에 대한 룬 검증 숫자입니다.
출처: ISO/IEC 7812-1, Identification cards — Identification of issuers — Part 1: Numbering system · H. P. Luhn, Computer for Verifying Numbers, U.S. Patent 2,950,048 (1960)