웹마스터 팁

────────────────────────────────────────────────────────────────
 원  리 :
*주민등록번호 예: 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도 곁들이는게 좋으
제목 글쓴이 날짜
[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] file 엔시™ 2005.11.08
예전에 책원고로 만들었던것인데 필요한분 사용하세요 [7] file 유창화 2005.10.22
이쁜 달력소스입니다. [2] file 최문혁 2005.09.05
자기계정에서 file()가 잘안될때.... [5] 이진환님 2005.08.18
일년치 달력을 한꺼번에 보자!!! [4] 未淚 2005.08.07
효율적인 경로 지정하기 [9] 대류 2005.07.27
대용량 파일 업로드 컴포넌트 [4] file OTLNO 2005.06.15
트랙백 기능 구현하기. 태규 2005.06.12
나만의 미니홈 만들기 ㅡ 메모장 소스 예뜨락 2005.06.09
mysql 테이블 스키마 보는법. [2] 최문혁 2005.05.14
나만의 미니홈 만들기 ㅡ 메모장 디자인 (html 소스) [4] 예뜨락 2005.05.12