Web/Javascript2009. 2. 18. 23:43


//<!-- 주민등록번호를 체크하는 함수  -->
//<!-- 작성일 : 2005년 08월 24일   -->
//<!-- 작성자 : 김희균       -->
//////////////////////////////////////////////////////////////////////////////////////////////////////
// 사용법                                //
// 1. 사용하고자하는 파일에서 아래의 예1과 같이 본 파일을 불러온다.          //
// 예1 : <script language="JavaScript" src="파일 경로/check_jumin.js"></script>       //
// 2. 원하는 이벤트 발생시 호출될 수 있도록 아래의 예2와 같이 html 테그의 속성으로 넣어준다. //
// 예2 : onBlur = "check_jumin(form name, jumin1 textfield name, jumin2 textfield name);"   //
//         onKeypress = "onlyNumber();"                      //
//////////////////////////////////////////////////////////////////////////////////////////////////////
 function check_jumin(form, jumin1, jumin2){      // form의 이름과 주민등록번호를 입력하는 2개의 text 객체를 받아온다
  // 주민등록번호 체크을 위한 기본 변수 선언
  var jumin = jumin1.value + jumin2.value;      // 입력된 주민등록번호 가져오기
  var key = "234567892345";           // 주민번호 생성 key 값
  var days = 0;                // 입력된 월의 일수를 저장할 변수
  var sum = 0;                // 곱해서 더한 총합
  var result = 0;                // 연산후 마지막 숫자가 들어갈 변수
  var year_next = jumin.substring(0, 2);       // 연도(뒤에 두자리)에 해당하는 두자리를 구함
  var month = jumin.substring(2, 4);        // 월에 해당하는 두자리를 구함
  var day = jumin.substring(4, 6);         // 일에 해당하는 두자리를 구함
  var sex = jumin.charAt(6);           // 성별에 해당하는 한자리를 구함
  var year_prev = (sex == "1" || sex == "2") ? "19" : "20"; // 연도(앞에 두자리)에 해당하는 두자리를 구함
  var year = year_prev + year_next;         // 연도에 해당하는 네자리를 구함
  // 길이가 13자인지 체크
  if (jumin.length != 13){
   alert("주민등록번호는 13자리이어야 합니다.\n\n다시 확인하시고 입력해 주세요");
   return false;
  }
  // 월에 해당하는 두자리의 적합성 검사
  if(month < 1 || month > 12){
   alert("주민등록번호중, 월에 해당하는 두자리가 잘못 입력되었습니다.\n\n다시 확인하시고 입력해 주세요.");
   jumin1.value="";
   jumin1.focus();
   return false;
  }
  // 월에 따른 일에 해당하는 두자리의 적합성 검사(윤년체크 포함)
  if(month=="01" || month=="03" || month=="05" || month=="07" || month=="08" || month=="10" || month=="12") {
   days = 31;
  }
  if(month=="04" || month=="06" || month=="09" || month=="11"){
   days = 30;
  }
  if(month=="02"){
   if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){     // 윤년일 경우의 2월의 일수를 구함
    days = 29;
   }else{
    days = 28;
   }
  }
  if(day > days){
   alert("주민등록번호중, 일에 해당하는 두자리가 범위보다 큽니다.\n\n다시 확인하시고 입력해 주세요.");
   return false;
  }
  // 성별 비트에 따라 성별 자동으로 설정하기
  if(sex == "1" || sex == "3"){}    //form.sex.value="m";
  else if(sex == "2" || sex == "4"){}  //form.sex.value="f";
  else{
   alert("주민등록번호중, 성별에 해당하는 한자리가 잘못 입력되었습니다.\n\n다시 확인하시고 입력해 주세요.");
   jumin2.value="";
   jumin2.focus();
   return false;
  }
  // 주민등록번호 생성 알고리즘에 의한 유효성 체크
  for(i=0; i<12; i++){
   sum += jumin.charAt(i) * key.charAt(i);
  }
  
  result = (11 - (sum % 11)) % 10;
  if (jumin.charAt(12) != result){
   alert("유효하지 않는 주민번호입니다.\n\n다시 확인하시고 입력해 주세요.");
   jumin1.value="";
   jumin2.value="";
   jumin1.focus();
   return false;
  }
  return true;
 }
 // 텍스트 필드에 숫자만 입력가능하게 한다.
 function onlyNumber(){
  if(event.keyCode < 48 || event.keyCode > 57)
   event.returnValue = false;
  return;
 }
Posted by Huikyun