검사 원리 (알고리즘)
주민등록번호는 앞자리가 6자리의 숫자로 구성되며, 태어난 날의 연도, 월, 일을 나타내는 숫자이다. 뒷자리는 일련번호로서, 7자리로 구성되며 첫번째 숫자는 성별을 나타내는 의미를 가지고 있다. 구분자인 '-' 기호를 빼면 총 13자리의 숫자로 구성되며, 정상적인 번호인지를 가려낼 수 있는 자체적인 정보를 담고 있다.
정상적인 주민등록번호인지를 판별하기 위해서는 먼저 주민등록번호 맨 뒷자리를 제외한 각 자릿수의 숫자들에 각각 지정된 숫자들을 곱해서, 이 결과들을 더해야 한다. 각 자릿수에 지정된 승수들은 다음과 같다. (아래에서 진하게 표시된 행은 주민등록번호를 나타낸다)
1 | 2 | 3 | 4 | 5 | 6 | - | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 2 | 3 | 4 | 5 | ||
n1 | n2 | n3 | n4 | n5 | n6 | n7 | n8 | n9 | n10 | n11 | n12 |
각 자릿수에 지정된 승수들을 더한 값을 N이라고 하면,
N = n1 + n2 + n3 + ... + n12
N을 11로 나눈 나머지를 11에서 뺀 수가 주민등록번호 마지막 자릿수와 일치하면 정상적인 주민등록번호이다.
11 - (N % 11) = 마지막 자릿수
N의 값이 11로 나누어 떨어지거나 나머지가 1이라면 위 식의 값은 10 또는 11이 된다. 마지막 자릿수는 1자리이기 때문에 이런 경우에는 비교할 때 같지 않은 것으로 처리되기 때문에 위 식을 다시 한번 10으로 나누어 그 나머지를 취하여 마지막 자릿수와 비교해야 한다. 따라서, 위 식을 다음과 같이 수정해야 한다.
(11 - (N % 11)) % 10 = 마지막 자릿수
위의 공식을 이해하고 있다면, 가짜 주민등록번호를 생성하는건 매우 쉬운일이겠죠?