웹마스터 팁

────────────────────────────────────────────────────────────────
 원  리 :
*주민등록번호 예: 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도 곁들이는게 좋으
제목 글쓴이 날짜
일년치 달력을 한꺼번에 보자!!! [4] 未淚 2005.08.07
자기계정에서 file()가 잘안될때.... [5] 이진환님 2005.08.18
이쁜 달력소스입니다. [2] file 최문혁 2005.09.05
예전에 책원고로 만들었던것인데 필요한분 사용하세요 [7] file 유창화 2005.10.22
주민등록번호 진위확인 [5] file 엔시™ 2005.11.08
[PHP 동영상강좌] 1. HTML이란 무엇인가! [22] 서기 2005.11.17
[PHP 동영상강좌] 2. 하이퍼링크, 테이블태그의 사용방법 [15] 서기 2005.11.17
[PHP 동영상강좌] 3. 테이블 태그의 심화 [10] 서기 2005.11.17
[PHP 동영상강좌] 4. 스타일 시트 [17] 서기 2005.11.17
[PHP 동영상강좌] 5. 웹서버/웹브라우져/PHP란 무엇인가 [12] 서기 2005.11.17
[PHP 동영상강좌] 6. Hello PHP [14] 서기 2005.11.22
[PHP 동영상강좌] 7. Get방식을 이용한 변수의 전달 [12] 서기 2005.11.22
[PHP 동영상강좌] 8. Get방식의 전달과 테이블, 스타일태그의 사용 [13] 서기 2005.11.22
[PHP 동영상강좌] 9. form태그를 이용한 값의 전달 [15] 서기 2005.11.22
[PHP 동영상강좌] 10. 그외의 form관련 태그들 [16] 서기 2005.11.22
[PHP 동영상강좌] 11. 메일 발송하기 [16] 서기 2005.11.23
[PHP 동영상강좌] 12. IF문의 사용 [6] 서기 2005.11.23
[PHP 동영상강좌] 13. IF문을 이용한 수우미양가 출력하기 [10] 서기 2005.11.23
[PHP 동영상강좌] 14. 여러개의 파일을 거쳐서 값전달하기 [7] 서기 2005.11.23
[PHP 동영상강좌] 15. 여러개의 파일을 이용한 설문조사 [7] 서기 2005.11.23