Algorithm

주민등록번호 체계 및 유효성 검사 (javascript)

Dongkkase 2016. 10. 7. 15:31
반응형

 

ABCDEF - GHIJKLM

주민등록번호는 위와 같이 13자리로 구성되어 있다. 각 구성을 알아보자.

 

 

ABCDEF

 : 생년월일

 

G: 성별을 나타낸다.생년월일의 년도가 2자리만 표기가 되기때문에 A에서 자세히 구분할수 있다.

  • 1: 1900년대에 출생한 남자
  • 2: 1900년대에 출생한 여자
  • 3: 2000년대에 출생한 남자
  • 4: 2000년대에 출생한 여자
  • 5: 1900년대에 출생한 외국인 남자
  • 6: 1900년대에 출생한 외국인 여자
  • 7: 2000년대에 출생한 외국인 남자
  • 8: 2000년대에 출생한 외국인 여자
  • 9: 1800년대에 출생한 남자
  • 0: 1800년대에 출생한 여자
 
HIJK: 출생신고를 한 지역 코드이며 아래와 같은 형식을 가지고 있다.
  • H: 지역 
  • I: 시.군.구
  • J: 동.읍.면
  • K: 통.반.리
HI는 출생등록지에 해당하는 지방자치단체의 고유번호이다.
JK는 출생등록을 한 읍.면.동주민센터 고유 번호로, 주민센터마다 고유한 번호가 행정자치부에 의해 부여되어 있다.
 
L: 해당지역에서 출생신고를 한 당일의 접수 순번을 나타낸다.
(이 숫자는 1부터 시작되며, 통계상 보통 5를 넘지 않는다고 한다.)
 
M: 검증번호로 앞의 12자리를 가지고 특정한 공식으로 산출한 숫자를 적는다.
공식: M = (11 - ((2×A + 3×B + 4×C + 5×D + 6×E + 7×F + 8×G + 9×H + 2×I + 3×J + 4×K + 5×L) % 11)) % 10
소괄호 안에 잇는것을 계산한 값을 11로 나누어 나온 나머지를 11에서 뺀 값이다. 단, 10은 0, 11은 1로 표기한다.
 
function ssnCheck(_ssn1, _ssn2)
{
    var ssn1    = _ssn1,
        ssn2    = _ssn2,
        ssn     = ssn1+''+ssn2,
        arr_ssn = [],
        compare = [2,3,4,5,6,7,8,9,2,3,4,5],
        sum     = 0;

    // 입력여부 체크
    if (ssn1 == '')
    {
        alert('주민등록번호를 기입해주세요.');
        return false;
    }

    if (ssn2 == '')
    {
        alert('주민등록번호를 기입해주세요.');
        return false;
    }    

    // 입력값 체크
    if (ssn1.match('[^0-9]'))
    {
        alert("주민등록번호는 숫자만 입력하셔야 합니다."); 
        return false; 
    }
    if (ssn2.match('[^0-9]'))
    {
        alert("주민등록번호는 숫자만 입력하셔야 합니다."); 
        return false; 
    }

    // 자리수 체크
    if (ssn.length != 13)
    {
        alert("올바른 주민등록 번호를 입력하여 주세요.");return false;
    }    


    // 공식: M = (11 - ((2×A + 3×B + 4×C + 5×D + 6×E + 7×F + 8×G + 9×H + 2×I + 3×J + 4×K + 5×L) % 11)) % 10
    for (var i = 0; i<13; i++) 
    { 
        arr_ssn[i] = ssn.substring(i,i+1); 
    }
    
    for (var i = 0; i<12; i++)
    {
        sum = sum + (arr_ssn[i] * compare[i]); 
    }

    sum = (11 - (sum % 11)) % 10;
    
    if (sum != arr_ssn[12])
    { 
        alert("올바른 주민등록 번호를 입력하여 주세요.");
        return false; 
    }

    return true;
}

ssnCheck('830422', '1185600');

 

반응형