본문 바로가기
JavaScript/jQuery

javascript 주민등록번호 유효성검사

by SSaMKJ 2017. 2. 17.


javascript 주민등록번호 유효성검사


웹에서 주민등록번호를 입력 받을 경우가 있는데, 그 때 사용할 유효성 검사기를 만들었습니다.


  
function isValidJuminNo(socialRegNumber) {

  socialRegNumber=String(socialRegNumber); // 문자로 변환

  if(!socialRegNumber || socialRegNumber.length!=13) {
    return '주민등록번호 입력이 잘못되었습니다.';
  }

  // 숫자가 아닌 것을 입력한 경우
  if (isNaN(socialRegNumber)) {
    return '주민등록번호 입력이 잘못되었습니다.';
  }

  var jumin1 = socialRegNumber.substr(0,6)
  , jumin2 = socialRegNumber.substr(6,7)
  , genda  = jumin2.substr(0,1)        // 성별 1~4
  , formalYear = (genda < 3) ? '19' : '20' // 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대
  , yyyy     = formalYear + jumin1.substr(0,2)
  , MM     = jumin1.substr(2,2)
  , dd     = jumin1.substr(4,2);

  // 성별부분이 1 ~ 4 가 아닌 경우
  if (genda < 1 || genda > 4) {
    return '주민등록번호 뒷자리를 다시 입력하세요.';
  }


  // 날짜 유효성 검사
  if (isValidDate(yyyy, MM, dd) == false) {
    return '주민등록번호 앞자리를 다시 입력하세요.';
  }

  // Check Digit 검사
  if (!isSSN(jumin1, jumin2)) {
    return '입력한 주민등록번호를 검토한 후, 다시 입력하세요.';
  }
  return '';
}

function isValidDate(yyyy, MM, dd) {
  var oDate = new Date();
  oDate.setFullYear(yyyy);
  oDate.setMonth(MM - 1);
  oDate.setDate(dd);

  if (oDate.getFullYear() != yyyy
      || oDate.getMonth() + 1 != MM
      || oDate.getDate() != dd) {

    return false;
  }

  return true;
}


function isSSN(jumin1, jumin2) {
  var n = 2;
  var sum = 0;
  for (var i = 0; i < jumin1.length; i++){
    sum += parseInt(jumin1.substr(i, 1)) * n++;
  }
  for (var i = 0; i < jumin2.length - 1; i++) {
    sum += parseInt(jumin2.substr(i, 1)) * n++;
    if (n == 10){
      n = 2;
    }
  }

  var checkSum = 11 - sum % 11;

  if (checkSum == 11){
    checkSum = 1;
  }

  if (checkSum == 10){
    checkSum = 0;
  }

  if (checkSum != parseInt(jumin2.substr(6, 1))){
    return false;
  }

  return true;
}



테스트용 링크입니다.

jsfiddle (https://jsfiddle.net/mbqznpyp/12/)



댓글