1. ID 번호의 구조 및 표현
1. 숫자의 구조
중국 인민 공화국의 국가 표준 GB11643-1999의 시민권 신원 번호에 대한 조항에 따르면, 시민권 식별 번호는 17 자리 숫자 온톨로지 코드와 일대일 검증 코드로 구성된 특징적인 조합 코드입니다. 계약 순서는 왼쪽에서 오른쪽으로 : 6 자리 주소 코드, 8 자리 출생 날짜, 3 자리 시퀀스 코드 및 1 자리 검증 코드입니다.
2. 주소 코드
코딩 객체의 영주권이 위치한 카운티 (City, Banner, District)의 행정부 코드는 GB/T2260의 조항에 따라 구현되어야한다.
3. 생년월일
인코딩 된 물체의 출생 연도, 월 및 일을 나타냅니다. GB/T7408의 조항에 따라 실행됩니다. 연도, 월 및 당일 코드 사이에는 분리기가 없습니다.
4. 시퀀스 코드
동일한 주소 코드로 식별 된 영역 내에서 같은 해, 월 및 일에 태어난 사람들에게 할당 된 시퀀스 번호를 나타냅니다. 시퀀스 코드의 홀수는 남성에게 할당되며 숫자는 여성에게 할당됩니다.
5. 확인 코드
(1) 17 자리의 온톨로지 코드에 대한 가중 합계 공식
s = sum (ai * wi), i = 0, ..., 16, 처음 17 자리의 첫 번째 무게의 합
AI : I-TH 위치에서 ID 카드 번호의 번호 값을 나타냅니다.
WI : I-TH 위치에서 가중치를 나타냅니다
7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2) 계산 모드
y = mod (s, 11)
(3) 모듈을 통해 해당 검증 코드를 얻습니다
Y : 0 1 2 3 4 5 6 7 8 9 10
검증 코드 : 1 0 x 9 8 7 6 5 4 3 2
즉, 나머지가 1으로 얻어지면 마지막 체크 비트 P는 해당 0이어야합니다.
15 자리 숫자 :
aabbccyymmddxxs
18 자리 번호 :
AABBCCYYYYMMDDXXSP
2. 주소 코드
ID 카드의 첫 6 자리는 관리 부문 코드 (디지털 코드라고 함) 설명 ( "GB/T 2260-2007 중국 인민 공화국의 관리 부문 코드":이 디지털 코드의 편집의 원리 및 구조 분석은 3 계층 6 자리 계층 구조를 채택하며, 이는 지방 정부를 대표하며, 자율적 인 조권을 대표합니다. 지역), 지역, 지역, 자율 현, 리그) 및 카운티 (자율 카운티, 카운티 수준의 도시, 배너, 자율 배너, 시립 지구, 산림 지역, 특수 지구).
(1) 1 차 및 2 자리 : 주, 자치 지역, 중앙 정부 바로 아래의 지방 자치 단체 및 특수 행정 지역을 대표하는 지방의 규범.
지방 및 도시 코드 표 : {11 : "베이징", 12 : "Tianjin", 13 : "Hebei", 14 : "Shanxi", 15 : "Inner Mongolia", 21 : "Liaoning", 22 : "Jilin", 23 : "Heilongjiang", 31 : "Shanghai" 35 : "Fujian", 36 : "Jiangxi", 37 : "Shandong", 41 : "Henan", 42 : "Hubei", 43 : "Hunan", 44 : "Guangdong", 45 : "Guangxi", 46 : "Hainan", 50 : "Chongqing", 51 : "Guizhou", 51 : "Schuan" "Yunnan", 54 : "Tibet", 61 : "Shaanxi", 62 : "Gansu", 63 : "Qinghai", 64 : "Ningxia", 65 : "Xinjiang", 71 : "Taiwan", 81 : "Hong Kong", 82 : "Macao", 91 : "}
(2) 3 자 및 4 자리 : 지방 수준의 도시 (카운티) 코드는 중앙 정부 하의시, 지역, 자치 현, 동맹 및 지방 자치 단체의 관할하에있는 지구 및 카운티의 요약 규정을 나타내는 주 (자율 지역) 직접 행정부의 요약 규정을 나타냅니다.
—01 ~ 20, 51 ~ 70은 도시를 의미하며, 중앙 정부의 직접 지방 자치 단체는 01이 도시를 의미하며 02 이후는 지방 자치 단체의 교외 카운티를 의미합니다.
—21 ~ 50은 지역, 자율 현명 및 동맹을 의미합니다.
—90은 지방 (자율 지역) 하에서 직접 카운티 수준의 행정 부서의 요약 강령을 나타냅니다.
(3) 5 번째 및 6 자리 : 시사 수준 카운티 (City) 코드, 카운티, 자율 카운티, 카운티 수준의 도시, 배너, 자율 배너, 지방 자치 단체, 산림 지역 및 특수 지구를 나타내는 카운티.
—01 ~ 20은 도시, 지역 (자율 현행 현, 리그)의 관할하에 카운티 수준의 도시, 지방 자치 단체 및 지방 (자치 지역)에 따라 직접 카운티 수준의 행정 부서의 관할하에있는 카운티 수준의 도시를 의미합니다. 01은 일반적으로 관할권 요약 코드를 의미합니다.
—21 ~ 80은 카운티, 자율 카운티, 배너, 자율 배너, 산림 지역 및 지역 특수 구역을 의미합니다.
—81 ~ 99는 지방 (자치 지역)이 관할하에 카운티 수준의 도시를 가지고 있음을 의미합니다.
3. 다른
15 자리 ID 번호 :
7 번째와 8 자리는 출생 연도입니다 (두 자릿수는 올해의 마지막 두 자리로 나타납니다).
9 번과 10 번은 생년월일입니다.
11 일과 12 일은 생년월일을 나타냅니다.
13 번째와 14 번째 비트는 순차적 코드이며 임의의 숫자입니다.
15 숫자는 성별을 나타내고, 홀수는 수컷이고, 짝수 숫자는 여성입니다.
18 자리 ID 번호 :
7, 8, 9, 10은 출생 연도 (4 자리)입니다.
11 번과 12 번은 출생기입니다.
13 일과 14 일은 생년월일을 나타냅니다.
15 및 16 비트는 시퀀스 코드입니다.
17 번째 위치는 성별을 나타내고 홀수는 남성이며 숫자는 여성입니다.
마지막 비트는 점검 비트입니다.
4. JS 코드 예제
var idcardnoutil = { /*지방, 지방 코드 테이블* / provinceandcitys : {11 : "베이징", 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", 43 : "Hunan", 44 : "Guangdong", 45 : "Guangxi", 46 : "Hainan", 50 : "Chongqing", 51 : "Sichuan", 52 : "Guizhou", 53 : "Yunnan", 54 : "Tib et ", 61 :"Shaanxi ", 62 :"Gansu ", 63 :"Qinghai ", 64 :"Ningxia ", 65 :"Xinxia ", 71 :"Taiwan ", 81 :"Hong Kong ", 82 :"macao ", 91 :"외국 "}, /*모든 가중치 요소* /powers : ["7 ","9 ","10 ","5 ","8 ","4 ","2 ","1 ","6 ","3 ","7 ","9 ","5 ","8 ","4 ","2 ","2 " 18 번째 계산 코드 계산*/ paritybit : [ "1", "0", "x", "9", "8", "7", "7", "6", "5", "4", "3", "2"],/*성별*/ 성별 : {수컷 : "남성", "여성"},/*Check Address Code*/ CheckAddresscode : function (varcode). /^=]]/d (ddressCode); if (! check) false를 반환합니다. if (idcardNoutil.provinceAndCitys [parseint (jesssCode.SubString (0,2))) {return true; } else {return false; }},/*검사 날짜 코드*/CheckBirthDayCode : 함수 (birdayCode) {var check = /^=]/d {3 }(emecodemdaycode {var check = /^ retment {3 }(0 1-9 ]))) 년 1-9 둘어)))))))))) birdaycode); if (! check) false를 반환합니다. var yyyy = parseint (birdaycode.substring (0,4), 10); var mm = parseint (birdaycode.substring (4,6), 10); var dd = parseint (birdaycode.substring (6), 10); var xdata = 새로운 날짜 (YYYY, MM-1, DD); if (xdata> new date ()) {return false; // 생일은 현재 날짜보다 클 수 없습니다} else ((xData.getFallyEar () == yyyy) && (xdata.getmonth () == mm -1) && (xdata.getDate () == dd)) {return true; } else {return false; }}, /*교정 코드 계산* / getParityBit : function (idcardno) {var id17 = idcardno.substring (0,17); /*가중치*/ var power = 0; for (var i = 0; i <17; i ++) {power+= parseint (id17.charat (i), 10) * parseint (idcardnoutil.powers [i]); } /*모델* / var mod = power % 11; return idcardnoutil.paritybit [mod]; }, /*확인 코드 확인* / checkParityBit : function (idcardno) {var paritybit = idcardno.charat (17) .toupperCase (); if (idcardNoutil.getParityBit (idcardno) == paritybit) {return true; } else {return false; }},/*15 비트 또는 18 비트 ID 번호를 확인하십시오*/CheckIdCardno : function (idcardno) {// 15 비트 및 18 비트 ID 번호 var check = /^/d {15 }|(/d {17} (/d|x|x)))); if (! check) false를 반환합니다. // 길이를 15 비트 또는 18 비트로 판단합니다. if (idcardno.length == 15) {return idcardnoutil.check15idcardno (idcardno); } else if (idcardno.length == 18) {return idcardnoutil.check18idcardno (idcardno); } else {return false; }}, // 15 자리 ID 번호 점검 확인 15idcardno : function (idcardno) {// 15 자리 ID 번호의 기본 확인 var check = /^ 9]/d {7 }(em 1-9 ]) | (0-2 ]))) 년)))(0heman) :).........................1-2¨)/d {3 }$/.test (idcardno); if (! check) false를 반환합니다. // 주소 지정 코드 var var addressCode = idcardNo.SubString (0,6); check = idcardnoutil.checkaddresscode (주소 코드); if (! check) false를 반환합니다. var birddaycode = '19' + idcardno.substring (6,12); // 날짜 코드 확인 IDCARDNOUTIL.CHECKBIRTHDAYCODE (birdayCode); }, // 18 자리 ID 번호 점검 확인 18idcardno : function (idcardno) {// 기본 형식의 18 자리 ID 번호 var check = /^ reme {1-9 ]/d {3 }((0hementzermakrome (1-9} }(em1-9 ])))))))))))))) :)/d {3} (/d|x|x)$/.test(idcardno); if (! check) false를 반환합니다. // 주소 코드를 확인합니다 var addressCode = idcardNo.SubString (0,6); check = idcardnoutil.checkaddresscode (주소 코드); if (! check) false를 반환합니다. // 날짜 코드 확인 var birddayCode = idcardno.substring (6,14); check = idcardnoutil.checkbirthdaycode (birdaycode); if (! check) false를 반환합니다. //checkcardnoutil.checkparitybit(idcardno); }, formatdatecn : function (day) {var yyyy = day.substring (0,4); var mm = day.substring (4,6); var dd = day.substring (6); yyyy + '-' + mm + '-' + dd를 반환합니다. }, // 정보 가져 오기 getIdcardInfo : function (idcardno) {var idcardinfo = {성별 : "", // 성별 생일 : ""// 생년월일 (yyyy-mm-dd)}; if (idcardno.length == 15) {var aday = '19' + idcardno.substring (6,12); idcardinfo.birthday = idcardnoutil.formatedAtecn (aday); if (parseint (idcardno.charat (14))%2 == 0) {idcardinfo.gender = idcardnoutil.genders.female; } else {idcardInfo.gender = idcardNoutil.genders.male; }} else if (idcardno.length == 18) {var aday = idcardno.substring (6,14); idcardinfo.birthday = idcardnoutil.formatedAtecn (aday); if (parseint (idcardno.charat (16))%2 == 0) {idcardinfo.gender = idcardnoutil.genders.female; } else {idcardInfo.gender = idcardNoutil.genders.male; }} return idcardInfo; }, /*18 비트 ~ 15 비트* / getId15 : function (idcardno) {if (idcardno.length == 15) {return idcardno; } else if (idcardno.length == 18) {return idcardno.substring (0,6) + idcardno.substring (8,17); } else {return null; }}, /*15 비트 ~ 18 비트* / getId18 : 함수 (idcardno) {if (idcardno.length == 15) {var id17 = idcardno.substring (0,6) + '19' + idcardno.substring (6); var paritybit = idcardnoutil.getParitybit (id17); 반환 ID17 + paritybit; } else if (idcardno.length == 18) {return idcardno; } else {return null; }}}; // Identity Card Number Verification jQuery.validator.addMethod ( "idcardno", function (value, element) {return this.optional (요소) || idcardnoutil.checkidcardno (value);}, "유효한 ID 번호를 지정하십시오"); // ID 카드 정보 var var idcardinfo = idcardnoutil.getIdcardInfo (idcardno); Alert (idcardinfo.gender + "|" + idcardinfo.birthday); 참고 : 데이터베이스에 동일한 ID 카드가 이미 존재하는지 여부를 입력하고 결정할 때 (1) 15 비트 ID를 입력하는 경우 : 먼저 15 비트 ID가 존재하는지 확인하십시오. 존재하지 않으면 15 비트 ID 카드를 18 비트 ID 카드로 변환해야합니다. 여전히 존재하지 않으면 시스템에 입력 할 수 있습니다. (2) 18 비트 ID를 입력하는 경우 : 먼저 18 비트 ID가 존재하는지 확인하십시오. 존재하지 않으면 18 비트 ID 카드를 15 비트 ID 카드로 변환해야합니다. 여전히 존재하지 않으면 시스템에 입력 할 수 있습니다. 해당 15 비트 ID 카드를 찾으면 15 비트를 18 비트로 업데이트해야합니다.15 비트 및 18 비트 ID 카드의 JS 검증의 위의 간단한 예는 내가 공유하는 모든 콘텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.