본문 바로가기

Story/Javascript

주민등록번호 체크

반응형

/*****
  * 주민등록번호 체크
  * return : boolean
  * ex) 111111-1111111
  * TODO : 주민등록번호 뒷자리 첫번째 자리에 7,8 로 시작하는 주민등록 번호가 있다. 이것은 귀화한 사람에게 발급되는 번호라고 한다
  *    할 수 있다면 체크했으면 좋겠는데 아직은 위의 번호를 가진 사람도 보지 못했거니와 유효성도 같은 방식으로 해야 하는지 알지 못하겠다.
  *****/
 function check_regnum(resno){
 
  // 주민번호의 형태와 7번째 자리(성별) 유효성 검사
  fmt = /^d{6}-[1234]d{6}$/;
  if(!fmt.test(resno)) return false;
 
  // 날짜 유효성 검사
  birthYear  = (resno.charAt(7) <= "2") ? "19" : "20";
  birthYear += resno.substr(0, 2);
  birthMonth = resno.substr(2, 2) - 1;
  birthDate  = resno.substr(4, 2);
  birth      = new Date(birthYear, birthMonth, birthDate);
 
  if(birth.getYear() % 100 != resno.substr(0, 2) || birth.getMonth() != birthMonth || birth.getDate() != birthDate) return false;
 
  // Check Sum 코드의 유효성 검사
  buf = new Array(13);
  for (i = 0; i < 6; i++) buf[i] = parseInt(resno.charAt(i));
  for (i = 6; i < 13; i++) buf[i] = parseInt(resno.charAt(i + 1));
 
  multipliers = [2,3,4,5,6,7,8,9,2,3,4,5];
  for (i = 0, sum = 0; i < 12; i++) sum += (buf[i] *= multipliers[i]);
 
  if((11 - (sum % 11)) % 10 != buf[12]) return false;
 
  return true;
 }
반응형