웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
주민등록번호 진위확인
2005.11.08 00:19
────────────────────────────────────────────────────────────────
원 리 :
*주민등록번호 예: 640713-1018433
우선 주민등록번호 마지막자리수만 제외하고,
각각의 자리수마다 다음과 같은 수를 곱하여 전체를 더한다.
6 4 0 7 1 3 1 0 1 8 4 3 체크숫자3
x x x x x x x x x x x x
2 3 4 5 6 7 8 9 2 3 4 5 곱할수없음
-----------------------
+ + + + + + + + + + + +
즉, (6*2)+(4*3)+(0*4)+(7*5)+(1*6)+(3*7)+(1*8)+(0*9)+(1*2)
+(8*3)+(4*4)+(3*5) = 151
그러면 151 이란 수가 나온다. 이 151을 매직키인 11로 나누어 나머지만 취한다.
151 / 11 = 몫: 13 <-- 버림
나머지: 8
마지막 단계로 매직키인 11에서 나머지 8을 빼면 3이란 수가 나오는데,
이숫자가 주민등록번호 마지막 자리의 숫자(체크숫자)와 일치하면 정상적인 주민번호이다.
체크숫자와 11-나머지 = 3이므로 올바른주민번호 !
────────────────────────────────────────────────────────────────
소스정리 : (number.html은 소스해석을 할필요가 없는것같아서 생략)
<?
if((strlen($num)==6) && (strlen($ber)==7)) // number.html에서 첫번째폼,두번쨰폼에 숫자 6,7개가 들어가있나를 strlen함수로 검사
{
$total = 0; // 변수초기화
$id = $num . $ber; // 두개로 나눠져잇는 값을 하나로 합쳐 id변수에 저장
for($i=0; $i<13; $i++)
{
$id[$i] = intval($id[$i]); //정수화함
}
$total = $id[0]*2 + $id[1]*3 + $id[2]*4 + $id[3]*5 + $id[4]*6 + $id[5]*7 + $id[6]*8 +
$id[7]*9 + $id[8]*2 + $id[9]*3 + $id[10]*4 + $id[11]*5; //주민등록번호 식에 맞게 계산
$total = $total%11; //계산
$total2 = 11-$total; // 계산 (위에 원리참조)
if($total2>9) $total2 = $total2 % 10; //체크숫자는 무조건 1의자리니 10이상의 나머지가나온다면 1의자리로 변환함
$total = $id[12]; // 체크숫자를 total함수에 저장
if($total == $total2) // 체크숫자와 나머지가 값이 같은가확인
{
echo "
<script>
alert ('올바른 주민등록번호 입니다.');
history.back();
</script> //같다면 스크립트출력
";
}
else
{
echo "
<script>
alert ('올바른 주민등록번호가 아닙니다.다시입력해 주십시오');
history.go(-1);
</script>
"; // 같지않다면 스크립트출력
}
}
else
{
echo("
<script>
alert ('주민등록번호의 형식 혹은 길이 입력이 올바르지 않습니다.');
history.back();
</script>
"); //소스 맨위 if식에서 6,7자리 결과값이 틀리면 출력
}
?>
● 적으면서 :
소스출저 : php고수로가는길 (서적)
원리출저 : php스쿨 게시판중 발췌
php용 소스입니다.
javascript로 하는 방법도 있지만 클라이언트측 프로그램을 사용할 경우 변조에대한 보장은 책임을 질수 없습니다.
주민등록번호같은 중요한자료를 처리할 때는 php도 곁들이는게 좋으
원 리 :
*주민등록번호 예: 640713-1018433
우선 주민등록번호 마지막자리수만 제외하고,
각각의 자리수마다 다음과 같은 수를 곱하여 전체를 더한다.
6 4 0 7 1 3 1 0 1 8 4 3 체크숫자3
x x x x x x x x x x x x
2 3 4 5 6 7 8 9 2 3 4 5 곱할수없음
-----------------------
+ + + + + + + + + + + +
즉, (6*2)+(4*3)+(0*4)+(7*5)+(1*6)+(3*7)+(1*8)+(0*9)+(1*2)
+(8*3)+(4*4)+(3*5) = 151
그러면 151 이란 수가 나온다. 이 151을 매직키인 11로 나누어 나머지만 취한다.
151 / 11 = 몫: 13 <-- 버림
나머지: 8
마지막 단계로 매직키인 11에서 나머지 8을 빼면 3이란 수가 나오는데,
이숫자가 주민등록번호 마지막 자리의 숫자(체크숫자)와 일치하면 정상적인 주민번호이다.
체크숫자와 11-나머지 = 3이므로 올바른주민번호 !
────────────────────────────────────────────────────────────────
소스정리 : (number.html은 소스해석을 할필요가 없는것같아서 생략)
<?
if((strlen($num)==6) && (strlen($ber)==7)) // number.html에서 첫번째폼,두번쨰폼에 숫자 6,7개가 들어가있나를 strlen함수로 검사
{
$total = 0; // 변수초기화
$id = $num . $ber; // 두개로 나눠져잇는 값을 하나로 합쳐 id변수에 저장
for($i=0; $i<13; $i++)
{
$id[$i] = intval($id[$i]); //정수화함
}
$total = $id[0]*2 + $id[1]*3 + $id[2]*4 + $id[3]*5 + $id[4]*6 + $id[5]*7 + $id[6]*8 +
$id[7]*9 + $id[8]*2 + $id[9]*3 + $id[10]*4 + $id[11]*5; //주민등록번호 식에 맞게 계산
$total = $total%11; //계산
$total2 = 11-$total; // 계산 (위에 원리참조)
if($total2>9) $total2 = $total2 % 10; //체크숫자는 무조건 1의자리니 10이상의 나머지가나온다면 1의자리로 변환함
$total = $id[12]; // 체크숫자를 total함수에 저장
if($total == $total2) // 체크숫자와 나머지가 값이 같은가확인
{
echo "
<script>
alert ('올바른 주민등록번호 입니다.');
history.back();
</script> //같다면 스크립트출력
";
}
else
{
echo "
<script>
alert ('올바른 주민등록번호가 아닙니다.다시입력해 주십시오');
history.go(-1);
</script>
"; // 같지않다면 스크립트출력
}
}
else
{
echo("
<script>
alert ('주민등록번호의 형식 혹은 길이 입력이 올바르지 않습니다.');
history.back();
</script>
"); //소스 맨위 if식에서 6,7자리 결과값이 틀리면 출력
}
?>
● 적으면서 :
소스출저 : php고수로가는길 (서적)
원리출저 : php스쿨 게시판중 발췌
php용 소스입니다.
javascript로 하는 방법도 있지만 클라이언트측 프로그램을 사용할 경우 변조에대한 보장은 책임을 질수 없습니다.
주민등록번호같은 중요한자료를 처리할 때는 php도 곁들이는게 좋으
댓글 5
-
새천년건강체조
2005.11.08 02:13
-
김상도
2005.11.08 18:38
주민번호: 821115 - 16xxxx1인데
마지막번호가 1인데요 해보니까 안되네요 ㅡㅡ;;;
1이 나올려면 몫을 제외한 나머지가 10이 되야는데
어떻게 ㅡㅡ;;; -
치키니aaa
2005.11.08 19:13
건강체조 // ㅋ ;; 예제랍니다. php스쿨에있더군요 . 아무래도 생성한것같습니다
김상도 // 그럴리가요 ㅜㅜ ;; 이소스로 회원가입루틴에 넣은 사이트도 이써요 -
양점동
2005.11.10 13:50
제로보드 회원가입에 어떻게 적용하나요?
궁금해서 질문을 드립니다. -
치키니aaa
2005.11.10 23:08
제로보드에는 현재
number.html에서 이름: 주민번호: 입력후 member_join.php에서 판단후 주민등록폼에 적용한후가입처리
이렇게하려고하는데요. 기존 제로보드에있는 주민번호 검사기능과 다른점이없지만
요즘사이트보면 약관동의->주민번호확인->최종가입양식작성후 아이디발급
이런형식이 많이나와있어서 . 해볼렵니다. 곧올릴게요 `
제목 | 글쓴이 | 날짜 |
---|---|---|
[PHP 동영상강좌] 9. form태그를 이용한 값의 전달 [15] | 서기 | 2005.11.22 |
[PHP 동영상강좌] 8. Get방식의 전달과 테이블, 스타일태그의 사용 [13] | 서기 | 2005.11.22 |
[PHP 동영상강좌] 7. Get방식을 이용한 변수의 전달 [12] | 서기 | 2005.11.22 |
[PHP 동영상강좌] 6. Hello PHP [14] | 서기 | 2005.11.22 |
[PHP 동영상강좌] 5. 웹서버/웹브라우져/PHP란 무엇인가 [12] | 서기 | 2005.11.17 |
[PHP 동영상강좌] 4. 스타일 시트 [17] | 서기 | 2005.11.17 |
[PHP 동영상강좌] 3. 테이블 태그의 심화 [10] | 서기 | 2005.11.17 |
[PHP 동영상강좌] 2. 하이퍼링크, 테이블태그의 사용방법 [15] | 서기 | 2005.11.17 |
[PHP 동영상강좌] 1. HTML이란 무엇인가! [22] | 서기 | 2005.11.17 |
주민등록번호 진위확인 [5] | 엔시™ | 2005.11.08 |
예전에 책원고로 만들었던것인데 필요한분 사용하세요 [7] | 유창화 | 2005.10.22 |
이쁜 달력소스입니다. [2] | 최문혁 | 2005.09.05 |
자기계정에서 file()가 잘안될때.... [5] | 이진환님 | 2005.08.18 |
일년치 달력을 한꺼번에 보자!!! [4] | 未淚 | 2005.08.07 |
효율적인 경로 지정하기 [9] | 대류 | 2005.07.27 |
대용량 파일 업로드 컴포넌트 [4] | OTLNO | 2005.06.15 |
트랙백 기능 구현하기. | 태규 | 2005.06.12 |
나만의 미니홈 만들기 ㅡ 메모장 소스 | 예뜨락 | 2005.06.09 |
mysql 테이블 스키마 보는법. [2] | 최문혁 | 2005.05.14 |
나만의 미니홈 만들기 ㅡ 메모장 디자인 (html 소스) [4] | 예뜨락 | 2005.05.12 |
-_- 진위라는군요 ㅡㅡ;;;;;;;;;;; [보아허니 수도권 지역에서 태어나신 분같은데;;;]