덜 말도 안되는 코드를 직접 넣으면 주석의 구문 분석이 매우 명확하므로 여기에 BB가 없습니다.
코드 사본은 다음과 같습니다.
/*
중국 인민 공화국의 국가 표준 GB 11643-1999의 시민권 신원 번호에 대한 조항에 따르면, 시민권 식별 번호는 17 자리 디지털 온톨로지 코드와 한 자리 숫자 검증 코드로 구성된 특징적인 조합 코드입니다. 계약 순서는 왼쪽에서 오른쪽으로 : 6 자리 주소 코드, 8 자리 출생 날짜, 3 자리 시퀀스 코드 및 1 자리 검증 코드입니다.
주소 코드는 코딩 된 물체의 영주권이있는 카운티 (도시, 배너 및 지구)의 관리 부서 코드를 나타냅니다.
생년월일은 인코딩 된 물체의 출생 연도, 월 및 날을 나타내며 연도는 4 자리로 표시되며 연도, 월 및 일 사이에는 분리기가 없습니다.
시퀀스 코드는 동일한 주소 코드로 식별 된 영역 내에서 같은 해, 월 및 일에 태어난 사람에게 할당 된 시퀀스 번호를 나타냅니다. 주문 코드의 홀수는 남성에게 할당되며 숫자는 여성에게 할당됩니다.
확인 코드는 첫 번째 17 자리 코드와 ISO 7064 : 1983의 검증 코드에 따라 계산 된 검증 코드입니다.
생년월일 계산 방법.
비트의 ID 카드 코드는 첫 번째 출생 연도를 4 비트로 확장하여 19 또는 18을 추가하여 1800 년에서 1999 년 사이에 태어난 모든 사람들을 포함합니다.
새해 이후에 태어난 사람들은 18 살이어야하며 그러한 걱정은 없습니다. 1,800 년 전에 태어난 사람들은 당시 ID 번호가 없어야합니다.
다음은 정규 표현입니다.
생년월일 1800-2099 (18 | 19 | 20)?/d {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])
ID 카드 정규 표현식/^/d {6} (18 | 19 | 20)?/d {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])/d {3} (/d | x) $/i
비트 검증 규칙 6 자리 주소 코드 + 6 자리 생년월일 + 3 자리 시퀀스 번호
비트 확인 규칙 6 비트 주소 코드 + 8 비트 생년월일 + 3 비트 시퀀스 번호 + 1 비트 확인 비트
검증 숫자 규칙 공식 : ∑ (ai × wi) (mod 11)……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………
공식 (1)에서 :
i ----- 검증 코드를 포함하여 왼쪽에서 숫자 문자의 숫자 시퀀스 번호를 나타냅니다.
ai ----는 I-th 위치에서 숫자 문자 값을 나타냅니다.
WI ----는 I-TH 위치에서 가중치 계수를 보여주고 그 값은 공식 WI = 2^(N-1) (모드 11)에 따라 계산됩니다.
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
Wi 7 9 10 5 8 4 2 1 6 3 9 10 5 8 4 2 1
*/
// ID 번호의 합법성 확인
// 15 자리 및 18 자리 ID 번호를 지원합니다
// 주소 인코딩, 생년월일 및 체크 숫자 확인 지원
기능 IdentityCodeValid (코드) {
var city = {11 : "Beijing", 12 : "Tianjin", 13 : "Hebei", 14 : "Shanxi", 15 : "Inner 몽골 ", 21 :"Liaoning ", 22 :"Jilin ", 23 :"Heilongjiang ", 31 :"Shanghai ", 32 :"Jiangsu ", 33 : "Zhejiang", 34 : "Anhui", 35 : "Fujian", 36 : "Jiangxi", 37 : "Shandong", 41 : "Henan", 42 : "Hubei", "Hubei", 43 : "Hunan", 44 : "Guangdong", 45 : "Guangxi", 46 : "Hainan", 50 : "Chongqing", 51 : "Sichuan", 52 : "Guizhou", 53 : "Yun Nan ", 54 :"Tibet ", 61 :"Shaanxi ", 62 :"Gansu ", 63 :"Qinghai ", 64 :"Ningxia ", 65 :"Xinjiang ", 71 :"Taiwan ", 81 :"Hong Kong ", 82 :"마카오 ", 91 :"외국 "};
var tip = "";
var pass = true;
if (! 코드 ||!/^/d {6} (18 | 19 | 20)?/d {2} (0 [1-9] | 1 [12]) (0 [1-9] | [12]/d | 3 [01])/d {3} (/d | x) $/i.test (code)) {
tip = "Identity Card Number 형식 오류";
패스 = 거짓;
}
else if (! city [code.substr (0,2)]) {
tip = "주소 인코딩 오류";
패스 = 거짓;
}
또 다른{
// 마지막 확인 비트에 대해 18 자리 ID 카드를 확인해야합니다.
if (code.length == 18) {
code = code.split ( '');
// ∑ (ai × wi) (모드 11)
// 가중치 요소
var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 교정 비트
var parity = [1, 0, 'x', 9, 8, 7, 6, 5, 4, 3, 2];
var sum = 0;
var ai = 0;
var wi = 0;
for (var i = 0; i <17; i ++)
{
ai = 코드 [i];
wi = 계수 [i];
sum += ai * wi;
}
var last = parity [sum % 11];
if (parity [sum % 11]! = 코드 [17]) {
tip = "비트 오류 확인";
패스 = 거짓;
}
}
}
if (! pass) alert (팁);
반환 패스;
}
var c = '130981199312253466';
var res = IdentityCodevalid (c);
어때? 매우 포괄적 인 첫 번째 ID 번호 검증 코드입니다. 온라인으로 검색 한 다른 검증 코드와 같은 차원은 아닙니다. 필요한 경우 가져 가십시오.