Dev Note/JavaScript2008. 3. 7. 23:43

웹에서 주민번호 또는 외국인 등록번호를 입력 받아 체크하는 자바스크립트를 알아보자.

-- 국내인의 주민번호 체크 자바스크립트
   function ssnCheck(ssn) {
      var lastid, li_mod, li_minus, li_last;
      var checkValue = 0;

      if (ssn.length != 13) return false;
      lastid = parseFloat(ssn.substring(12,13));  
     
     
checkValue += (parseInt(ssn.substring(0,1)) * 2) + (parseInt(ssn.substring(1,2)) * 3)
            + (parseInt(ssn.substring(2,3)) * 4) + (parseInt(ssn.substring(3,4)) * 5)
            + (parseInt(ssn.substring(4,5)) * 6) + (parseInt(ssn.substring(5,6)) * 7)
            + (parseInt(ssn.substring(6,7)) * 8) + (parseInt(ssn.substring(7,8)) * 9)
            + (+parseInt(ssn.substring(8,9)) * 2)  + (parseInt(ssn.substring(9,10)) * 3)
            + (parseInt(ssn.substring(10,11)) * 4) + (parseInt(ssn.substring(11,12)) * 5);

      li_mod = checkValue % 11;
      li_minus = 11 - li_mod;
      li_last = li_minus % 10;

      if (li_last != lastid) return false;
     
      return true;
   }

-- 외국인 등록번호 체크 자바스크립트
   function isFrgNo(fgnno) {
      var sum = 0;
      var odd = 0;
      buf = new Array(13);

      for(i=0; i<13; i++) buf[i] = parseInt(fgnno.charAt(i));

      odd = buf[7]*10 + buf[8];

      if(odd%2 != 0) return false;

      if((buf[11]!=6) && (buf[11]!=7) && (buf[11]!=8) && (buf[11]!=9)) return false;

      multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];

      for(i=0, sum=0; i<12; i++) sum += (buf[i] *= multipliers[i]);

      sum = 11 - (sum%11);

      if(sum >= 10) sum -= 10;

      sum += 2;
      if(sum >= 10) sum -= 10;

      if(sum != buf[12]) return false;
 
      return true;
   }

그럼 위의 스크립트를 이용하여 사용자가 입력한 주민번호 또는 외국인 등록번호를 체크하는 간단한 예제로 확인해 보자.

   <body>
      <form name="form" action="" method="post">
        주민번호 :
         <input type="text" name="ssn1" size="10" maxlength="6" onkeyup="numCheck(this); ssn1_len_check();" />
         -
         <input type="text" name="ssn2" size="10" maxlength="7" onkeyup="numCheck(this);" />
         <input type="button" value="주민번호 체크" onclick="check();"/>
      </form>
   </body>

여기서 numCheck() 함수는 이전 글의 숫자만 입력 받는 TextField에서 확인할 수 있다.

   function numCheck(obj) {
      var numCheck = /^\d+$/;
      var checkStr = obj.value;

      if(checkStr != '') {
         if(!numCheck.test(checkStr)) {
            alert('숫자만 입력이 가능합니다.');
            obj.value = '';
            obj.focus();
         }
      }
   }

이외에 사용된 자바스크립트로 주민번호 앞 6자리가 입력 되면 뒷자리 입력으로 넘어가게 하는 ssn1_len_check() 함수와 실제 사용자가 입력한 주민번호 또는 외국인 등록번호를 체크하는 check() 함수가 있다.

   function ssn1_len_check() {
      var ssn1 = document.form.ssn1.value;
     
      if ( ssn1.length > 5 ) {
         document.form.ssn2.focus();
      }
   }

   function check() {
      var ssn1 = document.form.ssn1.value;
      var ssn2 = document.form.ssn2.value;
 
      if(ssn1 == '') {
         alert('주민번호 앞 6자리가 입력되지 않았습니다.');
         document.form.ssn1.focus();
         return;
      }

      if(ssn2 == '') {
         alert('주민번호 뒷 7자리가 입력되지 않았습니다.');
         document.form.ssn2.focus();
         return;
      }

      var ssn = ssn1 + ssn2;

      if(ssn2.substring(0,1) == '1' || ssn2.substring(0,1) == '3' ||
            ssn2.substring(0,1) == '2' || ssn2.substring(0,1) == '4') {
         // 국내 주민번호 체크
         if (ssnCheck(ssn) == false ) {
            alert('주민번호를 정확히 입력하십시오.');
            document.form.ssn1.value = '';
            document.form.ssn2.value = '';
            document.form.ssn1.focus();
            return;
         }
      } else {
         // 외국인 등록번호 체크
         if(isFrgNo(ssn) == false) {
            alert( "외국인 등록번호를 정확히 입력하십시오." );
            document.form.ssn1.value = '';
            document.form.ssn2.value = '';
            document.form.ssn1.focus();
            return;
         }  
      }
   }

이상 사용자가 입력한 주민번호 또는 외국인 등록번호를 체크하는 스크립트와 예제를 알아봤습니다.

Posted by as.wind.914