네이버 외국인 등록번호 체크 알고리즘 > html

본문 바로가기

html

네이버 외국인 등록번호 체크 알고리즘

작성일 09-01-07 10:49

페이지 정보

작성자서방님 조회 135회 댓글 2건

본문

<script language="javascript">
// Validation Check 에 관련된 UI 에 독립적인 함수들 모음
// 주민번호 7번째 자리의 규칙
// 1800년대: 남자 9, 여자 0
// 1900년대: 남자 1, 여자 2
// 2000년대: 남자 3, 여자 4
// 2100년대: 남자 5, 여자 6
// 외국인 등록번호: 남자 7, 여자 8

// 주민번호, 외국인 등록번호의  validation 체크 함수
function isValid_socno(socno)
{
 var socnoStr = socno.toString();
     a = socnoStr.substring(0, 1);
     b = socnoStr.substring(1, 2);
     c = socnoStr.substring(2, 3);
     d = socnoStr.substring(3, 4);
     e = socnoStr.substring(4, 5);
     f = socnoStr.substring(5, 6);
     g = socnoStr.substring(6, 7);
     h = socnoStr.substring(7, 8);
     i = socnoStr.substring(8, 9);
     j = socnoStr.substring(9, 10);
     k = socnoStr.substring(10, 11);
     l = socnoStr.substring(11, 12);
     m = socnoStr.substring(12, 13);
  month = socnoStr.substring(2,4);
  day = socnoStr.substring(4,6);
  socnoStr1 = socnoStr.substring(0, 7);
  socnoStr2 = socnoStr.substring(7, 13);

  // 월,일 Validation Check
  if(month <= 0 || month > 12) { return false; }
  if(day <= 0 || day > 31) { return false; }

  // 주민등록번호에 공백이 들어가도 가입이 되는 경우가 발생하지 않도록 한다.
  if (isNaN(socnoStr1) || isNaN(socnoStr2))  { return false; }

     temp=a*2+b*3+c*4+d*5+e*6+f*7+g*8+h*9+i*2+j*3+k*4+l*5;
     temp=temp%11;
     temp=11-temp;
     temp=temp%10;

     if(temp == m) {
        return true;
     } else {
        return false;
     }
}

function isValid_fgnno(socno)
{
 var total =0;
 var parity = 0;

 var fgnNo = new Array(13);

 for(i=0;i < 13;i++) fgnNo[i] = parseInt(socno.charAt(i));

 if(fgnNo[11] < 6) return false;

 if((parity = fgnNo[7]*10 + fgnNo[8])&1) return false;


 var weight = 2;

 for(i=0,total=0;i < 12;i++)
 {
  var sum = fgnNo[i] * weight;
  total += sum;

  if(++weight > 9) weight=2;
 }

 if((total = 11 - (total%11)) >= 10) total -= 10;
 if((total += 2) >= 10) total -= 10;
 if(total != fgnNo[12]) return false;

 return true;
}

function isValid_id( str )
{
     // check whether input value is included space or not
     if( str == ""){
      alert("아이디를 입력하세요.");
      return false;
     }

 // 아이디 가운데 빈 공간이 없도록 체크한다.
     var retVal = checkSpace( str );
     if( retVal ) {
         alert("아이디는 빈 공간 없이 연속된 영문 소문자와 숫자만 사용할 수 있습니다.");
         return false;
     }

     // 아이디는 '-' 로 시작할 수 없다.
 if( str.charAt(0) == '_') {
  alert("아이디의 첫문자는 '_'로 시작할수 없습니다.");
  return false;
 }

     // 길이와 허용 문자를 체크한다.
     var isID = /^[a-z0-9_]{3,12}$/;
     if( !isID.test(str) ) {
         alert("아이디는 3~12자의 영문 소문자와 숫자,특수기호(_)만 사용할 수 있습니다.");
         return false;
     }

  var isNum = /\d/;
     var i;
     var cnt = 0;
     for( i=0; i < str.length; i++) {
      if( isNum.test( str.substring( i, i+1 ) ) ) {
       cnt++;
      }
      if( cnt > 7 ) {
       alert("같은 문자가 7개 이상 사용되면 안됩니다.");
       return false;
      }
     }

     return true;
}

function isValid_passwd( str )
{
     var cnt = 0;
     if( str == ""){
      alert("비밀번호를 입력하세요.");
      return false;
     }

    /* check whether input value is included space or not  */
     var retVal = checkSpace( str );
     if( retVal ) {
         alert("비밀번호에는 공백이 있으면 안됩니다.");
         return false;
     }
     for( var i=0; i < str.length; ++i)
     {
         if( str.charAt(0) == str.substring( i, i+1 ) ) ++cnt;
     }
     if( cnt == str.length ) {
         alert("보안상의 이유로 한 문자로 연속된 비밀번호는 허용하지 않습니다.");
         return false;
     }

     var isPW = /^[A-Za-z0-9`\-=\\\[\];',\./~!@#\$%\^&\*\(\)_\+|\{\}:"<>\?]{6,16}$/;
     if( !isPW.test(str) ) {
         alert("비밀번호는 6~16자의 영문 대소문자와 숫자, 특수문자를 사용할 수 있습니다.");
         return false;
     }
     return true;
}

function isValid_email( str )
{
     /* check whether input value is included space or not  */
     if(str == ""){
      alert("이메일 주소를 입력하세요.");
      return false;
     }
     var retVal = checkSpace( str );
     if( retVal ) {
         alert("이메일 주소를 빈공간 없이 넣으세요.");
         return false;
     }

     /* checkFormat */
     var isEmail = /[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+(\.[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+)*@[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+(\.[-!#$%&'*+\/^_~{}|0-9a-zA-Z]+)*/;
     if( !isEmail.test(str) ) {
         alert("이메일 형식이 잘못 되었습니다.");
         return false;
     }
     if( str.length > 60 ) {
         alert("이메일 주소는 60자까지 유효합니다.");
         return false;
     }

     return true;
}

function isValid_name(str)
{
    str = str.replace(/(^\s*)|(\s*$)/g, "");
     if( str == '' ){
       alert("이름을 입력하세요");
         return false;
     }

     var retVal = checkSpace( str );
     if( retVal ){
         alert("이름은 띄어쓰기 없이 입력하세요.");
         return false;
     }
     if( !isHangul(str) ) {
         alert("이름을 한글로 입력하세요.");
         return false;
     }
     if( str.length > 10 ) {
         alert("이름은 7자까지만 사용할 수 있습니다.");
         return false;
     }
     return true;
}

function isValid_ForeignName( str )
{
    /* check format */
    var isENAME = /^[A-Z  ]{3,40}$/;

    if( !isENAME.test( str ) ) { return false; }

    return true;
}
// Validation Check 에 관련된 UI 에 독립적인 함수들 모음  ###########################################################################

 

function isNumeric(s)
{
     var isNum = /\d/;
     if( !isNum.test(s) ) { return false; }
     else { return true; }
}

function isHangul(s)
{
     var len;
     len = s.length;

     for (var i = 0; i < len; i++)  {
         if (s.charCodeAt(i) != 32 && (s.charCodeAt(i) < 44032 || s.charCodeAt(i) > 55203))
           return false;
     }

     return true;
}

// space 가 있으면 true, 없으면 false
function checkSpace( str )
{
     if(str.search(/\s/) != -1){
      return true;
     } else {
        return false;
     }
}
//데이터 판단을 위한 UI 에 독립적인 함수들 모음 ######################################################################################

 

 

// 주민번호 입력할 때 자동으로 다음 input 으로 이동한다.
// 접근성을 고려해서 만든 스크립트 이다. - 2008.03.19
var next_go = true;
var cur_val = null;
function moveNext(id_from,id_to,maxSize) {

 var cur = document.getElementById(id_from).value;
 curSize = cur.length;
 numFlag = isNumeric(cur);

 if ( !numFlag && curSize >= 1 && cur != '00' &&  cur != '000') {
  alert('숫자를 넣어주세요');
  document.getElementById(id_from).value='';
  document.getElementById(id_from).focus();
  return false;
 }
 if (curSize == maxSize) {
  if(next_go || cur_val != cur)
  {
   cur_val = cur;
   next_go = false;
   document.getElementById(id_to).focus();
  }
  return true;
 }
 next_go = true;
}


// 전화번호를 입력할 때 숫자 키, Tab, Enter 등만 입력되도록 키 이벤트를 무효화 한다. - 2008.01.07
function num_only( Ev ){
    var evCode = ( window.netscape ) ? Ev.which : event.keyCode ;

    /// FF일 경우 Ev.which 값을,
    //  IE을 경우 event.keyCode 값을 evCode에 대입
    //  enter 가 동작하도록 evCode 13을 추가
    if ( ! ( evCode == 0 || evCode == 8 || ( evCode >= 48 && evCode <= 57 ) || (evCode == 13) ) ) {
    // 눌러진 키 코드가 숫자가 아닌 경우
    //    ( '0'은 FF에서 Tab 키,
    //      '8'은 FF에서 BackSpace가 먹히지 않아 삽입)
        if ( window.netscape ) {        // FF일 경우
            Ev.preventDefault() ;       // 이벤트 무효화
        } else {                        // IE일 경우
            event.returnValue=false;    // 이벤트 무효화
        }
    }
}

//-->
</script>

 

<script language="javascript">
<!--
// 회원실명확인_인풋 동작
function inFocus1(i) {
 (i).style.border='2px solid #59a509';
}
function outFocus1(i) {
 (i).style.border='2px solid #cccccc';
}


function 여권번호()
{
// 여권번호 --------------------------------------------------------------------------
  if(tmplid && tmplid == 4 )  // passport
  {
   if( frm.passport_num.value == "" ) {
    alert("여권 번호를 입력하세요.");
    frm.passport_num.focus();
    return false;
   }

  fmt = /^[a-zA-Z0-9]{6,20}$/;
  if ( !fmt.test(frm.passport_num.value) ) {
   alert("여권번호가 잘못되었습니다.");
   frm.passport_num.focus();
   return false;
  }

   if( frm.userfile_org.value == "" ) {
    alert("여권 사본 이미지 파일을 업로드 하세요.");
    frm.userfile_org.focus();
    return false;
   }
 }
// 여권번호 --------------------------------------------------------------------------
}

//-->
</script>

 

<script type="text/javascript">
function submitForeigner()
{
 var frm = document.forms[0];
 {
  if(frm.r_name.value == '')
  {
   alert("이름을 입력하세요");
   frm.r_name.focus();
   return false;
  }
  if( !isValid_ForeignName(frm.r_name.value) && !isHangul(frm.r_name.value) )
  {
   alert("이름은 3자 이상 40자 이하의 한글 / 영문 대문자만 가능합니다");
   frm.r_name.focus();
   return false;
  }
  if( frm.r_socno1.value == '' )
  {
   alert("외국인등록번호 앞자리를 입력하세요");
   frm.r_socno1.focus();
   return false;
  }
  if( frm.r_socno1.value.length != 6 )
  {
   alert("유효한 외국인등록번호가 아닙니다");
   frm.r_socno1.focus();
   return false;
  }
  if( frm.r_socno2.value == '' )
  {
   alert("외국인등록번호 뒷자리를 입력하세요");
   frm.r_socno2.focus();
   return false;
  }
  if( frm.r_socno2.value.length != 7)
  {
   alert("유효한 외국인등록번호가 아닙니다");
   frm.r_socno2.focus();
   return false;
  }

  var socno = (frm.r_socno1.value + frm.r_socno2.value);
  var rVal = isValid_fgnno(socno);
  if( rVal == false )
  {
   alert("외국인등록번호가 유효하지 않습니다. 다시 입력하세요");
   frm.r_socno1.focus();
   return false;
  }
 }
 return true;
}

function submitPassport()
{
 var frm = document.forms[1];
 {
  if(frm.r_pass_name.value == '')
  {
   alert("이름을 입력하세요");
   frm.r_pass_name.focus();
   return false;
  }
  if(!isValid_ForeignName(frm.r_pass_name.value))
  {
   alert("이름은 3자 이상 40자 이하의 영문 대문자만 가능합니다");
   frm.r_pass_name.focus();
   return false;
  }
  if(frm.r_pass_no.value.length < 6 || frm.r_pass_no.value.length > 20 )
  {
   alert("여권번호를 확인하세요");
   frm.r_pass_no.focus();
   return false;
  }

  fmt = /^[a-zA-Z0-9]{6,20}$/;

  if ( !fmt.test(frm.r_pass_no.value) )
  {
   alert("여권번호가 잘못되었습니다.");
   frm.r_pass_no.focus();
   return false;
  }
 }
 return true;
}
</script>

<form name="formPvt" method="post" action="join.nhn" onSubmit="return submitForeigner()">
이름 : <input type="text" name="r_name" onFocus="inFocus1(this)" onBlur="outFocus1(this)"><br>
외국인등록번호 : <input type="text" name="r_socno1" onKeyup="moveNext('r_socno1','r_socno2',6);" maxlength="6" onFocus="inFocus1(this)" onBlur="outFocus1(this)"> - <input type="password" name="r_socno2" maxlength="7" onFocus="inFocus1(this)" onBlur="outFocus1(this)"><br>
<input type="submit" value="실명확인">
</form>



 

댓글목록

thankee님의 댓글

profile_image thankee
작성일

<p>혹시 아시나 모르겠는데, 외국인 등록번호 체크하는 로직이나 코드는 정부 사이트를 통해서 공개되어있습니다.. 해당 코드를 보시면 외국인 등록번호는 5678로 되어있습니다.</p>

서방님님의 댓글

profile_image 서방님
작성일

<p>좋은 정보 감사합니다. ^^</p>

게시물 검색
Copyright © 서방님.kr All rights reserved.
PC 버전으로 보기