[백업][가리사니] 주민등록번호 체크
javascript
이 문서는 가리사니 개발자 포럼에 올렸던 글의 백업 파일입니다. 오래된 문서가 많아 현재 상황과 맞지 않을 수 있습니다.
주민등록번호는 123456-ABCDEFG 와 같이 13자리 코드입니다.
123456 : 생년월일
A : 성별
코드 | 내용 |
---|---|
1 | 19xx 남자 |
2 | 19xx 여자 |
3 | 20xx 남자 |
4 | 20xx 여자 |
5 | 19xx 남자 외국인 |
6 | 19xx 여자 외국인 |
7 | 20xx 남자 외국인 |
8 | 20xx 여자 외국인 |
9 | 18xx 남자 |
0 | 18xx 여자 |
BCDE : 출신지역코드 F : 해당 동사무소의 출생신고 순서 G : 검증키
코드
// 주민번호체크
// 매번 찾아만들다가... 이제서야 작성...
function checkJuminNo(juminNo)
{
// 넘어온 값의 정수만 추츨하여 문자열의 배열로 만들고 13자리 숫자인지 확인합니다.
if ((juminNo = (juminNo+'').match(/\d{1}/g)).length != 13) {
return false;
}
// 합 / 체크키
var sum = 0, key = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];
// 체크키와 곱하여 합에더합니다.
for (var i = 0 ; i < 12 ; i++) { sum += (key[i] * Number(juminNo[i])); }
return ((11 - (sum % 11)) % 10) == Number(juminNo[12]);
}
ES6 이후
// 주민번호체크
// 매번 찾아만들다가... 이제서야 작성...
function checkJuminNo(juminNo)
{
// 넘어온 값의 정수만 추츨하여 문자열의 배열로 만들고 13자리 숫자인지 확인합니다.
if ((juminNo = (juminNo+'').match(/\d{1}/g)).length != 13) {
return false;
}
// 합 / 체크키
var sum = ([2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5])
.map((key, idx) => key * Number(juminNo[idx]))
.reduce((a, b) => a + b, 0);
return ((11 - (sum % 11)) % 10) == Number(juminNo[12]);
}
2022 버전
// 주민번호체크
// 하이픈을 제외한 숫자 형태만 받음.
function checkJuminNo(juminNo)
{
// 13자리 숫자 확인
if (!(/^[\d]{13}$/).test((juminNo += ''))) {
return false;
}
// 합 / 체크키
var sum = juminNo.substring(0, 12).split('')
.map((n, i) => Number(n) * (i < 8 ? i + 2 : i - 6))
.reduce((a, b) => a + b, 0);
return ((11 - (sum % 11)) % 10) == Number(juminNo[12]);
}