☆우리들의세상☆/♡☞좋은글방♡

주민등록번호의 끝자리는 번호가 아니다

문수봉(李楨汕) 2017. 11. 6. 10:47

주민등록번호의 체크숫자


주민등록번호도 상품의 바코드 시스템과 유사한 방법으로 구성되어 있다. 

우리나라 국민이라면 누구나 주민등록번호를 갖는다.

 지난 2013년  4월, Metro 신문에서 주민등록번호 오류로 10만976명이 정정을 했다고 하는 기사가 있었다. 

이는 주민등록과 가족관계 등록부(호적)에 기재된 주민등록번호가 다르게 기재된 경우라고 한다.

 

주민등록번호는 다음과 같이 만들어지는데, 우선 앞의 6자리는 본인의 생년월일이다. 뒷부분의 7자리는,

(1) 첫자리는 성별 구분 (1900년대 남자 1 여자 2, 2000년대 남자 3 여자 4, 1800년대 남 9 여자 0)

(2) 다음 네 자리는 주민등록 신청 지역번호 (시·도, 군·구, 읍·면·동 등)

(3) 여섯번째 자리는 주민등록 신청 당일 등록 순서

(4) 일곱번째인 마지막 자리는 오류를 체크하기 위한 체크 숫자이다.

 

체크 숫자= 마지막 숫자를 제외한 모든 숫자에 순서대로 Weight 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 각각 곱한 후 그 합으로부터 11의 배수(Modulus 11)를 만들기 위해 더해야 할 숫자 중 가장 작은 음이 아닌 숫자 (단, 체크 숫자가 10인 경우는 0으로 한다.)

그러나 이 체크 숫자가 0일 경우에는 개별 입력 오류를 식별하기가 어렵다. 예를 들어 850803-1056740인 경우를 350803-1056740으로 입력해도 체크 숫자가 0이 되어 오류를 식별하기 어렵다고 한다.

 

3. 국제 표준도서 번호(ISBN)의 체크숫자

책과 음반의 경우는 국제 표준도서 번호(ISBN)가 붙어 있다. ISBN에 뒤이어 10개의 숫자가 -(하이픈)으로 구분하는데 이때도 마지막 숫자는 체크 숫자이다.

 

체크 숫자= 10개의 숫자에 각각 10부터 1가지 차례로 자연수를 곱해서 더한 합이 11의 배수가 되도록 한다.


소개글

소프트웨어 공학 - 체크 디지트의 개념, 계산법.

목차

* 주민등록번호 *
* 신용카드 *
* EAN 바코드 *

본문내용

<체크 디지트의 개념, 원리> 
1 체크디지트(Check Digit) 
- 코드에 검사할 수 있는 숫자를 넣어 줌으로써, 컴퓨터에 의해 자동으로 검사하는 방법.
이 검사를 하기 위하여 넣어준 숫자를 체크디지트 라 한다.
* 주민등록번호 *
-계산 순서-
(1) 주민등록번호 각 자리에 2,3,4,5,6,7,8,9,2,3,4,5 의 숫자를 대입하여 곱한다.
단, 가장 마지막 자리 수는 제외한다.(체크디지트)
(2) 곱하여 얻은 값을 모두 덧셈 한다.
(3) 덧셈하여 얻은 값을 11로 나누어 나머지 값을 얻는다.
(4) 11로 나눈 나머지를 11에서 빼면, 그 숫자가 결과 값이다.
(예)- 주민등록번호 840919 123456x x=7
8 4 0 9 1 9 1 2 3 4 5 6
* 2 3 4 5 6 7 8 9 2 3 4 5 16 12 0 45 6 63 8 18 6 12 20 30 16+12+0+45+6+63+8+18+6+12+15+30 = 236 236 / 11 = 21 나머지 4 11 4 = 7 x = 7

보통 웹사이트에서 회원가입을 받을 때, 무단 가입을 막기 위한
인증 방법으로, 주민등록번호를 입력받는 곳이 대부분이다.
요즘 대부분의 사이트에서 하는 방법은 신용평가사와의 협약을 통해
주민등록번호를 통한 실명확인을 하는 것이 보통이다.
회원 가입시 신용평가사에서 보유한 DB에 접속하여 본인확인을
거치는 방법인데, 실명과 주민등록번호가 일치하여야 인증이 통과가
되는 방식이다. 하지만, 건당 수수료가 부과된다는 단점이 있다.

또 다른 방법으로는 신용평가사에서 이런 서비스를 하기 전에 사용하던 방법인데
바로 주민등록번호 알고리즘을 이용하여, 올바른 주민등록번호인지 아닌지
체크하는 방법이다. 물론 앞서 말한 실명과 주민등록번호를 매칭시키는
방법에 비하면 '인증'이라는 기능면에서 떨어지는 것이 사실이다.
하지만, 정확한 통계자료는 없지만 이 방법이라도 적용을 하면
어느 정도 효과는 볼 수 있다는 의견들이 지배적이다.

그럼 이 주민등록번호가 어떠한 체계로 이루어져 있으며
어떤식으로 프로그램화 하여야 하는지 알아 보겠다.

주민등록번호는 아주 간단한 수학적 암호화로 이루어져 있다.
780817-1169313 에서 - 를 제외하고는 숫자가 총 13개이다.

앞의 숫자는 6개 
다음 숫자는 7개

이 중에 앞의 6개는 생년월일[1978년 8월 17일]로 구성되어있으며,
뒤 7개의 숫자 중 첫번째는 성별 혹은 내국인/외국인[1],
2, 3, 4, 5번째 자리의 4자리 수[1693]는 출신 지역을 나타낸다.
뒤의 6번째 자리수[1]은 출생신고를 한 날, 그 동사무소에
출생신고를 한 순서를 나타낸다.
이 숫자 역시, 주민등록번호의 진위여부를 가리는데 중요한 역할을 한다.
보통 4를 넘지 않는 경우가 대부분인데, 같은 날에 한 동사무소에서 출생신고를
8명 9명씩 하는 경우는 거의 없기 때문에, 이 자리의 숫자가 7 8 9 등의 숫자라면
가짜라는 것을 의심해 볼 필요가 있다. 

만약 0이라면 무조건 가짜다.


그리고, 마지막으로 7번째 숫자[3]가 이 알고리즘에서 가장 중요한 역할을 한다.
앞의 숫자들은 전부 하나하나 의미를 가지고 있으며, 이들 숫자들을 가지고
간단한 연산을 하여 나온 결과값과 비교를 하기 위한 숫자로 마지막 자리의 숫자가
존재하는데, 프로그래머들은 이를 Check Digit 수라고 한다.


(1990년을 즈음하여 정부 행정작업들이 하나 둘 씩 전산화가 될 무렵,
아무 의미 없었던 이 마지막 자리 숫자가 아래에 소개될 알고리즘에 맞게
변경된 사람들도 종종있다. )


이 숫자를 구하는데 사용되는 알고리즘은 다음과 같다.

우선 총 12개의 A 라는 배열을 만들고 각각의 숫자를 입력하고 
2 3 4 5 6 7 8 9 2 3 4 5 를 각각 대입해 곱해준다.

예) 780817-1169313

A[0] ⅹ 2 배수 = 7*2
A[1] ⅹ 3 배수 = 8*3
A[2] ⅹ 4 배수 = 0*4
A[3] ⅹ 5 배수 = 8*5
A[4] ⅹ 6 배수 = 1*6
A[5] ⅹ 7 배수 = 7*7
A[6] ⅹ 8 배수 = 1*8
A[7] ⅹ 9 배수 = 1*9
A[8] ⅹ 2 배수 = 6*2
A[9] ⅹ 3 배수 = 9*3
A[10] ⅹ 4 배수 = 3*4
A[11] ⅹ 5 배수 = 1*5


그리고 대응된 각 배열의 숫자들을 모두 더해 주면

14 + 24 + 0 + 40 + 6 + 49 + 8 + 9 + 12 + 27 + 12 + 5 = 206

중간 결과값이 나오고 이를 11 로 나눈 나머지는
206 mod 11 = 8 이다.
다시, 11에서 이 값을 빼 주면
11 - 8 = 3 이며, 이 결과값이 Check Digit 로 주민등록번호의 제일 마지막 자리 수가 된다.


이번에는 앞서 말한, 주민등록번호 뒷자리의 구성에 대해서 좀 더 알아보도록 하자.
앞서 밝힌바와 같이 주민등록번호 뒷자리는 총 7자리 인데, 이 중 6자리가 의미 있는 숫자들이며
마지막 7번째 자리 숫자는 Check Digit의 역할을 한다.

첫번째 자리 : 성별을 나타내는데, 보통 남자는 1, 여자는 2 라고 알고 있지만 이는 일부만 알고 있는 것이다.
                  정확히 말하면, 홀수는 남자/짝수는 여자 를 나타낸다.
                  1,2(1900년대생) 3,4(2000년대생) 5,6(외국인에게 부여되는 번호, 외국인등록번호) 7,8(1800년대생)
                  로 구분하여 남/녀를 나타내는 것이다.

2~5번째 자리 : 출생신고한 지역의 지역코드 4자리를 나타낸다.
                    위에서 예를 든 번호에서는 1693 인데, 이 중 첫번째인 1은 큰 지역(특별시/광역시, 도)을
                    의미하며, 서울은 0과 1, 경기도는 2, 대구는 6, 경북은 7 등으로 구분된다.
                    그 아래로 각 시/군/구 와 동을 나타내게 된다.
       
여섯번째 자리 : 해당 지역코드에서 당일 출생신고된 순서를 말하는 것으로 보통은 1~2가 대부분이며
                     본인은 최고 4까지 본 적이 있다. 실제, 주민등록번호를 확인할 때 이 부분의 숫자가
                     6이상이면 허위일 가능성이 높다고 한다.
                     0은... 당연히 나올 수가 없다.

일곱번째 자리 : 앞에서 설명한 Check digit이다.


웹사이트를 관리하는 개인정보보호담당자나, 사이트를 개발하는 개발자들이
위의 내용을 알고 있다면, 업무에 조금이나마 도움이 될 것이다.

사실, 위의 알고리즘을 가지고 주민등록번호 생성기를 만들 수 있는 것도 사실이나,


요즘은 그런 제네레이터를 만들어 배포하는 것은 큰 범죄이기 때문에
창의 목적이 아닌 방패의 목적으로만 위의 알고리즘을 알고 있길 바란다.