ホームページ > ウェブフロントエンド > jsチュートリアル > 第二世代IDカード番号認証のjs実装を詳しく解説_javascriptスキル

第二世代IDカード番号認証のjs実装を詳しく解説_javascriptスキル

WBOY
リリース: 2016-05-16 16:31:00
オリジナル
1412 人が閲覧しました

ナンセンスな話はやめて、コードに直接アクセスしてください。分析はコメントで非常に明確なので、ここには BB はありません。

コードをコピーします コードは次のとおりです:

/*
中華人民共和国国家標準 GB 11643-1999 の国民 ID 番号に関する規定によれば、国民 ID 番号は 17 桁のボディ コードと 1 桁のチェック コードで構成される特徴的な組み合わせコードです。左から右へ、6 桁の住所コード、8 桁の生年月日コード、3 桁のシーケンス コード、1 桁のチェック コードの順です。
住所コードは、コーディング オブジェクトの永住地が所在する郡 (市、旗、地区) の行政区画コードを表します。
誕生日コードは、エンコーディング オブジェクトの誕生の年、月、日を表します。年は 4 桁で表され、年、月、日の間に区切り文字は使用されません。
通し番号は、同じ住所コードで特定される地域内で同じ年、月、日に生まれた人に割り当てられる通し番号を示す。シーケンスコードの奇数は男性に割り当てられ、偶数は女性に割り当てられます。
チェックコードは、先の17桁のコードに基づいてISO7064:1983.MOD11−2チェックコードに従って算出されたチェックコードである。

生年月日の計算方法。
ID カードの数字のコードは、まず 19 または 18 を追加して、1800 年から 1999 年の間に生まれたすべての人々が含まれるようにします。 1800 年以降に生まれた人は 18 桁目である必要があり、この問題は発生しません。1800 年より前に生まれた人は、おそらく当時 ID 番号を持っていませんでした。⊙﹏⊙bhan...
正規表現は次のとおりです:
生年月日 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)
式 (1):
i---- は、チェック コード
を含む、左から右への数字文字の位置シーケンス番号を表します。 ai---- は i 番目の位置の数値文字値を表します
Wi---- は i 番目の位置の重み係数を表し、その値は式 Wi=2^(n-1) (mod 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 7 9 10 5 8 4 2 1

*/
//ID 番号の正当性の検証
//15 桁と 18 桁の ID 番号をサポート
//住所コーディング、生年月日、チェックデジット検証をサポート
function IdentityCodeValid(code) {
var city={11:"北京",12:"天津",13:"河北",14:"山西",15:"内モンゴル",21:"遼寧",22:"吉林",23:"黒竜江省「、31:「上海」、32:「江蘇」、33:「浙江」、34:「安徽」、35:「福建」、36:「江西」、37:「山東」、41:「河南」 、42:「湖北」、43:「湖南」、44:「広東」、45:「広西」、46:「海南」、50:「重慶」、51:「四川」、52:「貴州」、53 : "雲南"、54:"チベット"、61:"陝西"、62:"甘粛"、63:"青海"、64:"寧夏"、65:"新疆"、71:"台湾"、81:"香港 ",82:"マカオ",91:"海外"};
vartip = "";
var pass= true;
if(!code || !/^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)){

ヒント = "ID カード番号の形式が間違っています";
pass = false;
}

else if(!city[code.substr(0,2)]){

ヒント = "アドレスのエンコーディングが正しくありません";
pass = false;
}
それ以外{
//18 桁の ID カードは最後のチェックデジットを検証する必要があります
if(code.length == 18){
コード = code.split('');
//∑(ai×Wi)(mod 11)
//重み付け係数
var 係数 = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
//チェックデジット
var パリティ = [ 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 {
ai = コード[i];
wi = 因子[i];
sum = ai * wi;
}
var last = パリティ[sum % 11];
if(パリティ[合計 % 11] != コード[17]){
ヒント = "チェックデジットエラー";
pass =false;
}
}
}
if(!pass) アラート(ヒント);
リターンパス;
}
var c = '130981199312253466';
var res= IdentityCodeValid(c);


どうですか? これは非常に包括的な最初の ID 番号確認コードです。オンラインで見つけられる他の確認コードとは異なります。必要に応じて使用してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート