JavaScript/jQuery
javascript 주민등록번호 유효성검사
SSaMKJ
2017. 2. 17. 11:39
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/)