[백업][가리사니] 주민등록번호 체크
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]);
}