주민등록번호 유효성의 체크 로직

2007.07.04 22:21Programming/C#.NET

주민등록번호 체크 로직

1. 주민등록번호의 앞 6자리의 수에 처음부터 차례대로 2,3,4,5,6,7 을 곱한다. 그 다음, 뒤 7자리의 수에 마지막 자리만 제외하고 차례대로 8,9,2,3,4,5 를 곱한다.

2. 이렇게 곱한 각 자리의 수들을 모두 더한다.

3. 모두 더한 수를 11로 나눈 나머지를 구한다.

4. 이 나머지를 11에서 뺀다.

5. 이렇게 뺀 수가 두 자릿수이면, 즉 10보다 크면 다시 11로 나누어 나머지 값을 구한다.

6. 이렇게 해서 나온 최종 값을 주민등록번호의 마지막 자리 수와 비교해서 같으면 유효한 번호이고 다르면 잘못된 값이다.



아까 그거에 맞춰 제가 짜본 체크 함수 입니다.
오픈 소스 지향~~~ ^^


function isJuminValid(num)
 {
  if(isNaN(num) || num.length != 13) 
  {
   return false;
  } 

  var mm = num.charAt(2) + num.charAt(3);
  var dd = num.charAt(4) + num.charAt(5);

  if(parseInt(mm) == 0 || parseInt(mm) > 12)
  {
   return false;
  }

  if(parseInt(dd) == 0 || parseInt(dd) > 31)
  {
   return false;
  }

  if(parseInt(num.charAt(6)) == 0 || parseInt(num.charAt(6)) > 4)
  {
   return false;
  }

  var arrDivide = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]; 
  var sum = 0;

  for(var i = 0; i < num.length - 1; i++)
  {  
    sum += parseInt(num.charAt(i)) * parseInt(arrDivide[i]); 
  }

  var mod = 11- (sum % 11);
  if(mod >= 10)
  {
   mod = mod % 11;
  }

  if(num.charAt(num.length - 1) != mod)
  {
   return false;
  }

  return true;
 }

  • 프로필사진
    philosup2010.03.16 10:12

    정리해놓은 자료가 없어 구글링하다 들어왔습니다. 검색어(주민번호 체크 로직)
    로직 설명의 마지막 부분이 잘못되었네요.
    5번에 10보다 크면 11로 나누는 것이 아니라 10으로 나누어야 합니다.
    이미 11로 나눈 값이라 10보다 크다는건 결국 10이란 소리인데요.
    11로 나누어봤자 계속 10이겠지요^^.