룬 알고리즘이란?
룬(Luhn) 알고리즘은 'mod 10' 알고리즘이라고도 불리며, 1954년 IBM 과학자 한스 페터 룬(Hans Peter Luhn)이 고안한 간단한 체크섬 공식입니다. 신용카드·체크카드 번호, 휴대폰의 IMEI 일련번호, 그리고 여러 국가의 신분 식별번호 같은 식별 번호의 유효성을 확인하는 데 사용됩니다. 한 자리 오류와 대부분의 자릿수 뒤바뀜(전위) 실수를 잡아내지만, 이는 암호학적 보안 수단이 아니라 기본적인 데이터 무결성 검사일 뿐입니다.
계산기 사용 방법
확인하고 싶은 번호를 입력란에 입력하세요(공백과 하이픈은 자동으로 무시됩니다). 계산기는 각 자릿수를 처리하여 룬 체크섬을 적용한 뒤, 해당 번호가 유효함(VALID)인지 유효하지 않음(INVALID)인지 알려줍니다. 함께 누적 합계, 합계를 10으로 나눈 나머지, 마지막 검증 숫자도 보여줍니다.
공식 풀이
숫자를 오른쪽에서 왼쪽으로 읽습니다. 맨 오른쪽(검증) 자리는 그대로 두고, 두 번째 자리마다 2를 곱합니다. 2를 곱한 값이 9보다 크면 9를 뺍니다(두 자릿수를 더하는 것과 같습니다. 예: \(8 \times 2 = 16 \to 1 + 6 = 7\)). 이렇게 나온 모든 값을 더합니다. 합계가 10으로 나누어떨어지면 그 번호는 룬 검사를 통과합니다.
$$\text{Valid} \iff \left(\sum_{i=0}^{n-1} f(d_i)\right) \bmod 10 = 0 \\[1.5em] \text{where}\quad \left\{ \begin{aligned} d_i &= i\text{-th digit of } \text{Number} \text{ (from right)} \\ f(d_i) &= \begin{cases} d_i & i \text{ even} \\ 2d_i - 9\,[2d_i>9] & i \text{ odd} \end{cases} \end{aligned} \right.$$
예제로 보기
번호 79927398713을 살펴봅시다. 오른쪽에서부터 두 번째 자리마다 2를 곱하고 9를 넘는 값을 줄여 정리하면, 조정된 자릿수들의 합계는 70이 됩니다. \(70 \bmod 10 = 0\) 이므로 이 번호는 유효합니다.
자주 묻는 질문
룬 검사를 통과하면 실제로 쓸 수 있는 카드인가요? 아닙니다. 번호 형식이 올바르다는 것만 확인할 뿐, 해당 계좌가 실제로 존재하는지나 잔액이 있는지는 검사하지 않습니다.
어떤 문자를 입력할 수 있나요? 숫자만 사용됩니다. 공백, 하이픈, 그 밖의 기호는 계산 전에 모두 제거됩니다.
2를 곱할 때 왜 9를 빼나요? 9를 넘는 값에서 9를 빼면 그 값의 두 자릿수를 더한 것과 같은 결과가 나오는데, 이것이 바로 원래 룬 규칙이 요구하는 계산입니다.