주민등록번호 체크 로직
1. 주민등록번호의 앞 6자리의 수에 처음부터 차례대로 2,3,4,5,6,7 을 곱한다. 그 다음, 뒤 7자리의 수에 마지막
자리만 제외하고 차례대로 8,9,2,3,4,5 를 곱한다.
2. 이렇게 곱한 각 자리의 수들을 모두 더한다.
3. 모두 더한 수를 11로 나눈 나머지를 구한다.
4. 이 나머지를 11에서 뺀다.
5. 이렇게 뺀 수가 두 자릿수이면, 즉 10보다 크면 다시 11로 나누어 나머지 값을 구한다.
6. 이렇게 해서 나온 최종 값을 주민등록번호의 마지막 자리 수와 비교해서 같으면 유효한 번호이고 다르면 잘못된 값이다.
/**
* 주민등록번호의 유효성을 체크한다.
*/
function isValidJuminNo(juminno) {
if(juminno=="" || juminno==null || juminno.length!=13) {
alert("주민등록번호를 적어주세요.");
return false;
}
var jumin1 = juminno.substr(0,6);
var jumin2 = juminno.substr(6,7);
var yy = jumin1.substr(0,2); // 년도
var mm = jumin1.substr(2,2); // 월
var dd = jumin1.substr(4,2); // 일
var genda = jumin2.substr(0,1); // 성별
var msg, ss, cc;
// 숫자가 아닌 것을 입력한 경우
if (!isNumeric(jumin1)) {
alert("주민등록번호 앞자리를 숫자로 입력하세요.");
return false;
}
// 길이가 6이 아닌 경우
if (jumin1.length != 6) {
alert("주민등록번호 앞자리를 다시 입력하세요.");
return false;
}
// 첫번째 자료에서 연월일(YYMMDD) 형식 중 기본 구성 검사
if (yy < "00"
|| yy > "99"
|| mm < "01"
|| mm > "12"
|| dd < "01"
|| dd > "31") {
alert("주민등록번호 앞자리를 다시 입력하세요.");
return false;
}
// 숫자가 아닌 것을 입력한 경우
if (!isNumeric(jumin2)) {
alert("주민등록번호 뒷자리를 숫자로 입력하세요.");
return false;
}
// 길이가 7이 아닌 경우
if (jumin2.length != 7) {
alert("주민등록번호 뒷자리를 다시 입력하세요.");
return false;
}
// 성별부분이 1 ~ 4 가 아닌 경우
if (genda < "1" || genda > "4") {
alert("주민등록번호 뒷자리를 다시 입력하세요.");
return false;
}
// 연도 계산 - 1 또는 2: 1900년대, 3 또는 4: 2000년대
cc = (genda == "1" || genda == "2") ? "19" : "20";
// 첫번째 자료에서 연월일(YYMMDD) 형식 중 날짜 형식 검사
if (isValidDate(cc+yy+mm+dd) == false) {
alert("주민등록번호 앞자리를 다시 입력하세요.");
return false;
}
// Check Digit 검사
if (!isSSN(jumin1, jumin2)) {
alert("입력한 주민등록번호를 검토한 후, 다시 입력하세요.");
return false;
}
return true;
}
function isValidDate(iDate) {
if( iDate.length != 8 ) {
return false;
}
oDate = new Date();
oDate.setFullYear(iDate.substring(0, 4));
oDate.setMonth(parseInt(iDate.substring(4, 6)) - 1);
oDate.setDate(iDate.substring(6));
if( oDate.getFullYear() != iDate.substring(0, 4)
|| oDate.getMonth() + 1 != iDate.substring(4, 6)
|| oDate.getDate() != iDate.substring(6) ){
return false;
}
return true;
}
function isNumeric(s) {
for (i=0; i<s.length; i++) {
c = s.substr(i, 1);
if (c < "0" || c > "9") return false;
}
return true;
}
function isSSN(s1, s2) { [출처]http://blog.naver.com/dalbong97
n = 2;
sum = 0;
for (i=0; i<s1.length; i++)
sum += parseInt(s1.substr(i, 1)) * n++;
for (i=0; i<s2.length-1; i++) {
sum += parseInt(s2.substr(i, 1)) * n++;
if (n == 10) n = 2;
}
c = 11 - sum % 11;
if (c == 11) c = 1;
if (c == 10) c = 0;
if (c != parseInt(s2.substr(6, 1))) return false;
else return true;
}
'IT > JavaScript' 카테고리의 다른 글
[JavaScript] lightbox2로 사진첩을 만들자 (0) | 2012.05.31 |
---|---|
[JavaScript] 라디오 버튼을 이용한 화면 전환 (0) | 2011.12.14 |
[JavaScript] document객체 정리 표입니다. (0) | 2011.10.19 |
[JavaScript] 새로고침 방법 (0) | 2011.10.13 |
[JavaScript] Style (0) | 2011.10.10 |