1。ID番号の構造と表現
1。数の構造
中華人民共和国の国家標準GB11643-1999の市民権のアイデンティティ番号に関する規定によると、市民権のアイデンティティ番号は特徴的な組み合わせコードであり、17桁の数値オントロジーコードと1対1の検証コードで構成されています。アレンジメント順序は、左から右にあります。6桁のアドレスコード、8桁の生年月日コード、3桁のシーケンスコード、1桁の検証コード。
2。アドレスコード
コーディングオブジェクトの永住権が配置されている郡(市、バナー、地区)の行政部門コードは、GB/T2260の規定に従って実装されるものとします。
3。生年月日
エンコードされたオブジェクトの誕生の年、月、日を示します。 GB/T7408の規定に従って実行されます。年、月、日のコードの間にセパレーターはありません。
4。シーケンスコード
同じアドレスコードで識別されたエリア内で、同じ年、月、日に生まれた人々に割り当てられたシーケンス番号が示されています。シーケンスコードの奇数数は男性に割り当てられ、偶数が女性に割り当てられます。
5。検証コード
(1)17桁のオントロジーコードの加重額
s = sum(ai * wi)、i = 0、...、16、最初の17桁の最初の合計
AI:i番目の位置でのIDカード番号の数値を示します
WI:i番目の位置での重み係数を表します
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: "Beijing"、12: "Tianjin"、13: "Hebei"、14: "Shanxi"、15: "Inner Mongolia"、21: "liaoning"、22: "Jilin"、23: "heilongjiang"、31: "shanghai"、32: "34:" an 「Fujian」、36: "Jiangxi"、37: "Shandong"、41: "Henan"、42: "Hubei"、43: "Hunan"、44: "Guangdong"、45: "guangxi"、46: "hainan"、50: "chongqing"、51: "" sichuan "、"、 "、" 「Yunnan」、54: "Tibet"、61: "Shaanxi"、62: "Gansu"、63: "Qinghai"、64: "Ningxia"、65: "Xinjiang"、71: "Taiwan"、81: "Hong Kong"、82: "Macao"、 "Macao"、 "Macao"、
(2)3桁目と4桁目:地方レベルの都市(郡)コード。これは、中央政府の直下にある都市、地域、自治県、同盟、および自治体の管轄下にある地区および郡の略式コード、および郡レベルの行政区域の略式コード(ヴィンヴィンヴィンチア系)の直下の略式コードを表す。
- 01〜20、51〜70は都市を意味し、中央政府の直下の自治体は01を意味し、02の後、市政府の管轄内の郊外郡を意味します。
- 21〜50は、地域、自律県、および提携を意味します。
--90は、州(自律領域)の直下に直接郡レベルの行政部門の要約コードを表します。
(3)5桁目と6桁:県レベルの郡(市)コード、郡、自律郡、郡レベルの都市、旗、自律バナー、自治体地区、森林地域、特別地区を示すコード。
- 01〜20は、郡レベルの都市、地方自治体の特殊地区、および郡レベルの行政区域(自律地域)の管轄下にある都市の管轄下にある郡レベルの都市、地域(自治県、リーグ)を意味します。 01は通常、管轄権の要約コードを意味します。
- 21〜80とは、郡、自律郡、バナー、自律バナー、森林地帯、および地域の特別ゾーンを意味します。
- 81〜99とは、州(自治地域)が管轄下にある郡レベルの都市を持っていることを意味します。
3。その他
15桁のID番号:
7桁目と8桁目は出生年(2桁目、年の最後の2桁で表される)です。
No. 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: "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"、43: "Hunan"、44: "Guangong"、 45:「広州」、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:" Foreign "}、 /*すべての重み付け係数* /Powers:[7"、 "9"、 "10"、 "5"、 "8" 4 "、" 2 "、" 1 "、" 6 18th Calculating Code*/ ParityBit:["1"、 "0"、 "x"、 "9"、 "8"、 "7" 6 "、" 5 "4"、 "3" 2 "]、/*genders*/ genders:{male:" male "、mefaly:" fame "}、/*edcress dresscode:unction(var checkode( /^ [1-9 ]/d {5 }$/.test(addresscode); if(!check)falseを返します。 if(idcardnoutil.provinceandcitys [parseint(addresscode.substring(0,2))]){return true; } else {return false; }}、/*日付コードをチェック*/checkbirthdaycode:function(birdaycode){var check = /^ [1-9]/d {3 }((01-9 [000-2] (1-0-2])(01-9員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 = new Date(yyyy、mm-1、dd); if(xdata> new date()){return false; //誕生日は現在の日付よりも大きくできない} } 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]); } /*model* / var mod = power%11; return idcardnoutil.paritybit [mod]; }、 /*Check Code* / 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 =/x {15}}(/d {17} (/d| x| x)))$/.test(adcardno); 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番号Check15IdCardno:function(idcardno){// 15桁のID番号の基本的検証var check = /^ [1-9 ]/d {7 }((01-9>))))((01-9>))))(3} )/d {3} )/d {3}。test(idcardno); if(!check)falseを返します。 //アドレスコードvar addresscode = idcardno.substring(0,6); check = idcardnoutil.checkaddresscode(addresscode); if(!check)falseを返します。 var birddaycode = '19' + idcardno.substring(6,12); //日付コードをチェックしてくださいidcardnoutil.checkbirthdaycode(birdaycode); }、// 18桁のID番号Check18IdCardno:function(idcardno){// 18桁のID番号の基本形式の検証var check = /^ [1-9 ]/d {5} if(!check)falseを返します。 //アドレスコードvar addresscode = idcardno.substring(0,6)を確認します。 check = idcardnoutil.checkaddresscode(addresscode); 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); return yyyy + ' - ' + mm + ' - ' + dd; }、//情報getIdcardinfo:function(idcardno){var idcardinfo = {gender: ""、// gender Birthday: "" // birt of birt(yyyymm-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; }} 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:function(idcardno){if(idcardno.length == 15){var id17 = idcardno.substring(0,6) + '19' + idcardno.substring(6); var paritybit = idcardnoutil.getParitybit(id17); ID17 +パリティビットを返します。 } else if(idcardno.length == 18){return idcardno; } else {return null; }}}; // IDカード番号検証jquery.validator.addmethod( "idcardno"、function(value、element){return this.optional(element)|| idcardnoutil.checkidcardno(value);}、 "有効なID番号を指定してください。"); // IDカード情報を取得var idcardinfo = idcardnoutil.getidcardinfo(idcardno); alert(idcardinfo.gender + "|" + idcardinfo.birthday);注:15ビットIDを入力する場合、データベース(1)に同じ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をもっとサポートできることを願っています。