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/)
댓글