![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
주민번호 13자리 구성이 아래와 같다네요..
------------------------------------------------------------- | 1 | 2 | 3 | 4 | 5 | 6 | - | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------- | 생년 | 생월 | 생일 | |성별| 지역코드 |순번 |코드| -------------------------------------------------------------- 출생 년도 (YY = 00 - 99 사이의 값) +---+ | | 출생월 (MM = 01 - 12 사이의 값) | | +---+ | | | | 출생일 (DD = 01 - 31 사이의 값) | | | | +---+ | | | | | | 남,여 구분 (1, 3 = 남자, 2, 4 = 여자 ) | | | | | | | Y Y M M D D - X C +------------------------------------------------------------------+ | 0 1 2 3 4 5 6 7 8 9 10 11 12 | index | 6 6 0 5 1 0 - 1 3 2 1 6 1 1 | | 2 3 4 5 6 7 8 9 2 3 4 5 KEY | +------------------------------------------------------------------+ (11- {12+ 18+ 0+ 25+ 6+ 0+ 8+ 27+ 4+ 3+ 24+ 5}%11)% 10== 1 * 주민등록 번호 검사 비트 검사 방법 1) 주민등록 번호에 앞에서부터 2,3,4,5,6,7,8,9,2,3,4,5를 차례로 곱한다. {0..11}%8+2 2) 각각의 값을 모두 더한다. sum 3) 이 합을 11로 나눈다. 그러면 나머지는 0,1,2,3,4,5,6,7,8,9,10이다. 4) 나머지를 11에서 뺀다. 5) 이때 나머지 값이 10을 넘으면 10를 빼고, (11-sum%11)%10 그렇지 않으면 나머지 값이 주민등록 검사 비트이다. 예) 660510-1321611 6 * 2 + 6 * 3 + 0 * 4 + 5 * 5 + 1 * 6 + 0 * 7 + 1 * 8 + 3 * 9 + 2 * 2 + 1 * 3 + 6 * 4 + 1 * 5 = 132, 132 % 11 = 0 11 - 0 = 11 % 10 = 1 그러므로 1이다. |
기본 알고리즘은 맞는것 같은데요
그런데 저것만 가지고는 안될것입니다.
얼마든지 말도 안되는 숫자가 주민번호가 될수 있죠
앞에 6자리는 반드시 년-월-일 인데...
년은 상관없지만
월에 "12"보다 큰 숫자가 들어가면 안될것이구
일에도 "31"보다 큰 숫자가 들어가면 안될것입니다.
그리고 7번째 자리는 성별을 나타내는데
옛날에는 남자=1 여자=2 였지만
2000년이후 출생자는 남자=3 여자=4 입니다.
7번째 자리에 0이거나 4보다 큰 숫자가 나오면 이상하겠죠
실제로 제 주민번호 7번째 자리에 5를 넣고 돌려보이 true가 떨어지네요
주민번화 관련해서는 web쪽에 많이 쓰지 않나요?
java 스크립트로 구현된것이 많던것 같은데...
그럼..