2010년 2월 10일 수요일

주민번호 알고리즘 & javascript 구현해보기

필요에 의해서 주민번호 알고리즘에 대해서 검색하게 되었다.

 

처음엔 소스를 그냥 긁어다 쓸려고 했지만 자스를 공부하는 입장에서 그건 좀 아닌듯 싶어서

 

일단 주민번호 알고리즘을 검색해 보았다.

 

생각보다 간단한 알고리즘을 가지고 있었다.

 

1. 주민등록번호 각각의 수에 [2,3,4,5,6,7,8,9,2,3,4,5] 를 순서대로 자리수에 맞게 각각 곱한다.

2. 곱해서 나온 결과 값을 모두 더한다.

3. 합한 값을 11로 나눈 나머지 값을 11로 뺀다.

4. 최종결과값이 주민등록 마지막 자리와 같아야 한다.

 

이것을 javascript 로 구현해 보았다.

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title></title>
<script type="text/javascript">
 function juminCheck(){

  // 주민번호 앞자리 뒷자리값을 가져온다.
  this.jMin1 = document.getElementById("jumin1");
  this.jMin2 = document.getElementById("jumin2");

 

  // juminck 함수를 만든다.

  this.juminck = function(jumin){

     // 전체 합을 넣어줄 변수선언, 0으로 초기화
     var jSum = 0;

     // 각자리에 곱해줄 수를 배열로 담는다.
     var jNum = [2,3,4,5,6,7,8,9,2,3,4,5];

   for (var i=0;i<jumin.length-1 ;i++ )
   {

     // 전체를 루프로 돌리면서 각자리에 chk 배열에

    //들어있는 값을 곱하고 sum 변수에 더해준다.
    jSum = jSum + (parseInt(jumin.substr(i,1))*jNum[i]);
   }

 

   // 모두 더한 값을 11로 나눈 나머지를 11로 빼준다.

   var jCkval = (11-(jSum)%11);

  

   // 초종값이 주민번호 마지막 자리와 같은지 비교해서 값을 리턴해준다.
   if (jCkval === jumin.substr(12,1))
   {
    return true;
   }else{
    return false;
   }


  };

  this.juminck(this.jMin1.value+this.jMin2.value);
  }

</script>
</head>
<body>
 <input type="text" id="jumin1" name="jumin1"  />
 <input type="text" id="jumin2" name="jumin2"  />
 <button onclick="juminCheck()">체크</button>
</body>
</html>

 

알고리즘도 간단하고 소스도 간단한데 다른 소스들을 보고 쓸때없이 따라하다 시간이 오래걸렸다.

음 이제 부터 남 소스부터 보기도단 알고리즘만 알고 먼저 코딩을 해봐야 겠다.

댓글 없음:

댓글 쓰기