C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[781] 주민번호 체크.... 저에게도 이게 필요할 때가 있군요
박영목 [gsbsoft] 7981 읽음    2008-07-18 12:12
데브피아 답글을 보고 만들어 보았습니다....   너무 간단하군요... ㅋㅋㅋ

이렇게 주민번호 간단히 체크하는 것 맞는지도 가르쳐 주시면 감사하겠습니다.


데브피아 강명희님의 글을 보고 한번 만들어 보았습니다. 저도 사용해야 하기에....
이것은 C++Builder에서 했는데... 함수가 다 동일한지는 모르겠음... ㅋㅋㅋ 알았서 하세요,.

"10보다 크면 10을 빼 줘야 되요." 가   아니라     10과 같거나 크면 10을 빼 줘야 되요가 옳은 것 같네요....

어떻게 되었던 아래를 만들 수 있어서 감사히 생각합니다.

부산에서  월천 박영목 올렸습니다...... 다들 행복하세요.......


bool ConfirmJUMIN( char *jumin )
{
  if( strlen( jumin )!=13 )
    return false;
  //-----------------------------------------------------------------------------


  int nCheck[12] = { 2,3,4,5,6,7,8,9,2,3,4,5 };

  int nTot=0;

  int i=0;
  while( i<12 )
  {
    nTot += (jumin[i]-0x30) * nCheck[i];
    i++;
  }

  int iCode = nTot % 11;
  int nLastJumin = jumin[12]-0x30;

  iCode = 11-iCode;
  if( iCode>=10 ) iCode-=10;

  if( nLastJumin==iCode )
    return true;
  else
    return false;
}


  char jumin[] = "6701011234564";    //주민번호는 가상인데 끝자리가 True가 되도록 바꾸어 놓았습니다. 값은 True

  bool bRet = ConfirmJUMIN( jumin );
장성호 [nasilso]   2008-07-18 13:38 X
히야~~! 주민번호 체크.. 정말 오랫만에 보내요...

기본 알고리즘은 맞는것 같은데요

그런데 저것만 가지고는 안될것입니다.
얼마든지 말도 안되는 숫자가 주민번호가 될수 있죠

앞에 6자리는 반드시 년-월-일 인데...
년은 상관없지만
월에 "12"보다 큰 숫자가 들어가면 안될것이구
일에도 "31"보다 큰 숫자가 들어가면 안될것입니다.


그리고 7번째 자리는 성별을 나타내는데
옛날에는 남자=1  여자=2 였지만
2000년이후 출생자는 남자=3 여자=4 입니다.
7번째 자리에 0이거나 4보다 큰 숫자가 나오면 이상하겠죠

실제로 제 주민번호 7번째 자리에 5를 넣고 돌려보이 true가 떨어지네요

주민번화 관련해서는 web쪽에  많이 쓰지 않나요?
java 스크립트로 구현된것이 많던것 같은데...

그럼..
장성호 [nasilso]   2008-07-18 13:49 X
주민번호 13자리 구성이 아래와 같다네요..

-------------------------------------------------------------
| 1  |  2 |  3 |  4 |  5 |  6 |  - |  7   |  8 |  9 | 10 | 11 |  12  |  13 |
--------------------------------------------------------------
| 생년   |   생월  |   생일  |    |성별|   지역코드         |순번 |코드|
--------------------------------------------------------------
장성호 [nasilso]   2008-07-18 13:57 X
방금 알았는데요
1800년대에는 성별번호가 남=9  여=0 이었다네요

1800년대에 태어났으면 한국나이로 109세가 넘어야는데...
우리나라에 몇명이나 있을까나?
박영목 [gsbsoft]   2008-07-18 14:30 X
장성호님 감사... 늘 잊지 않고 댓글을 주셔서... 감사....
도움이 되었습니다... 나도 해보니..
너무 허술해 보여... 그런데
위의 규칙을 다 지켜서 만든다고 해도 가짜를 쉽게 만들 수 있으니
만들 수 있으니...

이것만 해도 될 것 같은 느낌...  년 월 일 정도... 더 추가핳까?
시간 남으면 ㅋㅋㅋㅋ...   이번 회사는 풀젝을 계속해서 주기 때문에...
현재 뇌가 맛이 가고 있음... 계속 신경을 쓰며 코딩만 8시간 정도...
ㅋㅋㅋ   나원,,,,  회사는 잘 들어가야 합니다.,,,  ㅋㅋㅋ

그럼... 다음에
권창구.태원아빠 [shiftcap]   2008-08-25 16:31 X

      출생 년도 (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이다.

권창구.태원아빠 [shiftcap]   2008-08-25 16:37 X
 
<FORM NAME="form1" METHOD=POST ACTION="">
<SCRIPT LANGUAGE="JavaScript">
<!--
function isCitizenID(strCityID)
{
	var result;
	var sum = 0;
	for (var i=0; i<strCityID.length-1; ++i)
		sum += strCityID.charAt(i) * ((i%8)+2);
	sum = (11-(sum%11))%10;
	result = sum == strCityID.charAt(12) ? true : false;
	return result;
}
function func()
{
	if (isCitizenID(form1.text1.value+form1.text2.value)==true)
		alert ("true");
	else
		alert ("false");
}
//-->
</SCRIPT>
	<INPUT TYPE="text" NAME="text1">-<INPUT TYPE="text" NAME="text2">
	<BR>
	<INPUT TYPE="button" onClick="func()" value="검사">
</FORM>

박영목 [gsbsoft]   2008-09-05 10:36 X
태원아빠 상세한 설명 감사합니다...      행복하세요.... 

+ -

관련 글 리스트
781 주민번호 체크.... 저에게도 이게 필요할 때가 있군요 박영목 7981 2008/07/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.