Web

주민등록번호 체크 알고리즘

알콜뭉뭉이 2017. 5. 31. 05:58

알고리즘을 설명하기 전에 몇가지 확인하고 넘어가야 할 기본 사항이 있습니다.

1. 앞자리 6자리가 생년월일이라는 사실은 누구나 아는 것이죠.
2. 뒷번호 첫번째 자리가 1이나 3일 경우에는 남자이고 2나 4일 경우에는 여자입니다. 이것도 모두 아는 사항이죠.
3과 4는 Y2K문제로 2000년 후 출생자의 경우에 저렇게 된다는 군요. 성별을 구분할 때 홀수인지 짝수인지를 검사해도 되지만 다소 정확도가 떨어지기 때문에 이것은 1,2,3,4중 하나의 숫자인지를 확인하는 것이 확실합니다.
3. 뒷자리의 2번째 부터 6번째까지의 자리는 출생지역에 관한 것인 것으로 아는 저도 정확히 무엇을 뜻하는지는 모릅니다. ^^;
4. 그리고 가장 중요한 마지막자리가 나머지 숫자의 연산해 의해서 계산되어 나오는 체크넘버입니다.
다시말해서 어떤 사이트에 회원가입할 때 주민등록번호란에 아무 번호나 써놓고 마지막자리만 0 ~ 9중의 숫자로 계속 돌려서 입력하다 보면 맞는 숫자가 나온다는 것이지요.

자 그럼 이제 진짜 중요한 체크비트인 마지막 자리를 계산해 내는 계산법입니다.

주민등록번호 790608 - 2552416를 예로 해 보겠습니다.(임의로 생성한 번호입니다.)

체크방법:
(1) 주민등록번호 각각의 수에 234567892345를 순서대로 자리수에 맞게 12자리만 각각 곱합니다.
(2) 곱해서 나온 결과값을 모두 합합니다.
(3) 11에서 합한 값을 11로 나눈 나머지 값을 뺍니다.
(4) 최종결과값이 주민등록번호 마지막자리와 같아야 합니다.
주민등록번호  7  9  0  6  0  8  -  2  5  5  2  4  1  6
체크수  2  3  4  5  6  7     8  9  2  3  4  5   
곱셈 계산결과 (1)  14  27  0  30  0  56     16  45  10  6  16  5   
덧셈 계산 (2)  14 + 27 + 0 + 30 + 56 + 16 + 45 + 10 + 6 + 16 + 5 = 225
체크 계산  11 - (225를 11로 나눈 나머지) = 마지막자리값

자 별거 아니죠? 이것을 이용해서 실제로 PHP, ASP, JSP, JAVASCRIPT등에서 함수로 만들면 됩니다.
아마 각각 언어별로 함수들이 모두 구현되어 공개되어 있을 것입니다.
찾아서 받아서 쓰기만 해도 되겠지만 직접 만들어보는 것도 공부에 많은 도움이 되겠지요?

참고자료 : http://blog.naver.com/ezyoun78?Redirect=Log&logNo=100007790821