ホームページ  >  記事  >  ウェブフロントエンド  >  ID番号のJavaScript検証_javascriptスキル

ID番号のJavaScript検証_javascriptスキル

WBOY
WBOYオリジナル
2016-05-16 16:11:251123ブラウズ

私たちがインターネットのウェブサイトを構築するとき、個人情報を登録するときによくID番号を使用します。そうでないと、他の人は番号を入力してパスするだけで、このウェブサイトが非常に優れていると感じます。くそー。

ID番号にはルールがあります。

構造と形状

1.数値構造
国民識別番号は、17 桁のボディ コードと 1 桁のチェック コードで構成される特徴的な組み合わせコードです。左から右へ、6 桁の住所コード、8 桁の生年月日コード、3 桁のシーケンス コード、1 桁のチェック コードの順です。
2.住所コード
コーディング オブジェクトの永住地が所在する郡 (市、旗、地区) の行政区画コードを示し、GB/T2260 の規定に従って実装されます。
3.生年月日コード
エンコードオブジェクトの誕生年、月、日を示します。GB/T7408 の規定に従って実装されます。年、月、日のコードの間に区切り文字はありません。
4.シーケンスコード
同じ住所コードで特定される地域内で同じ年、月、日に生まれた人に割り当てられる順序番号を表し、順序コードの奇数が男性、偶数が女性に割り当てられます。
5.確認コード
前の 17 桁のコードに基づいて、チェック コードは ISO 7064:1983.MOD 11-2 チェック コードに従って計算されます。
計算方法

1. ID 番号の前の 17 桁にさまざまな係数を掛けます。 1 位から 17 位までの係数は、7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2 です。
2. これらの 17 桁の数値と係数を乗算した結果を加算します。
3. 加算した合計を 11 で割ります。余りは何ですか?
4. 残りは 0-1-2-3-4-5-6-7-8-9-10 の 11 桁の数字のみです。対応する最後の ID 番号は 1-0-X-9-8-7-6-5-4-3-2 です。
5. 上記より、余りが 3 の場合、ID カードの 18 桁目は 9 になることがわかります。対応する番号が 2 の場合、ID カードの最後の番号はローマ数字の x になります。
例: 男性の ID カード番号は [53010219200508011x] です。この ID カードが合法的な ID カードであるかどうかを確認してみましょう。
まず、最初の 17 桁の積の合計を取得します [(5*7) (3*9) (0*10) (1*5) (0*8) (2*4) (1*2) (9*1) (2*6) (0*3) (0*7) (5*9) (0*10) (8*5) (0*8) (1*4) (1*2) ] は 189 なので、189 を 11 で割ると、結果は 189/11=17----2 となり、余りは 2 になります。最後に、対応するルールを通じて、剰余 2 に対応するチェック コードが X であることがわかります。したがって、これは正しいID番号であると判断できる。
上記は百度百科事典から引用しました。

これはインターネット上で見つかった関連情報の画像です。

既知の情報によると、このメソッドの内部実装は js で記述できます。最初の 17 桁の検証は実装が比較的簡単なので、詳細には触れず、チェック コードの最後の桁に焦点を当てます。

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

// ID番号の確認
function isIdCard(cardid) {
// IDカードの正規表現(18ビット)
var isIdCard2 = /^[1-9]d{5}(19d{2}|[2-9]d{3})((0d)|(1[0-2]))(([0|1] |2]d)|3[0-1])(d{4}|d{3}X)$/i;
var stard = "10X98765432" //最後の ID 番号
; var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17 係数
; var sum = 0;
If (!isIdCard2.test(cardid)) {
return false;
}
var year = Cardid.substr(6, 4);
var month = Cardid.substr(10, 2);
var day = Cardid.substr(12, 2);
var 誕生日 = Cardid.substr(6, 8);
If (birthday != dateToString(new Date(year '/' month '/' day))) { //日付が有効かどうかを検証します
return false;
}
for (var i = 0; i sum = Cardid[i] * first[i];
}
var result = sum % 11;
var last = stard[result] //計算された最後の ID 番号
; If (cardid[cardid.length - 1].toUpperCase() == last) {
true を返します;
} else {
return false;
}
}
//日付を文字列に変換し、日付形式 20080808
を返します function dateToString(date) {
If (日付インスタンスの日付) {
var year = date.getFull Year();
var month = date.getMonth() 1;
月 = 月 var day = date.getDate();
日 = 日 return 年 月 日;
}
'';
を返します }

ここでは18桁のIDカードのみが認証され、15桁の第一世代IDカードは使用できません。

日付の正当性もここで検証されます。0230、0431 などの不正な日付の場合、検証は通過しません。

検証を容易にするために、このメソッドを jquery validate に追加することもできます。

カスタム jquery validate 検証メソッドを作成します

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

// ID番号の確認
jQuery.validator.addMethod("isIdCard",
関数(値, 要素) {
this.optional(element) を返します || (isIdCard(value));
}、
"ID 番号が不正です!");

簡単なデモを見て、それがどのように機能するかを見てみましょう。

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

 
 
     <頭>
        
         <タイトル>
             身份证号校验
        
        
        
         <スクリプトタイプ="text/javascript">
             $(関数() {
                 $("#form1").validate({
                     ルール: {
                         txtIdCard: "isIdCard"
                     }
                 });
             });
             // 身份证号验证
             function isIdCard(cardid) {
                 //身份证正则表达式(18位)
                 var isIdCard2 = /^[1-9]d{5}(19d{2}|[2-9]d{3})((0d)|(1[0-2]))(([0|1] |2]d)|3[0-1])(d{4}|d{3}X)$/i;
                 var stard = "10X98765432"; //最後一位身份证的号
                 var first = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //1-17系数
                 var sum = 0;
                 if (!isIdCard2.test(cardid)) {
                     false を返します;
                 }
                 var year = Cardid.substr(6, 4);
                 var month = Cardid.substr(10, 2);
                 var day = Cardid.substr(12, 2);
                 var 誕生日 = Cardid.substr(6, 8);
                 if (birthday != dateToString(new Date(year '/' month '/' day))) {//校验日期是否合法
                     false を返します;
                 }
                 for (var i = 0; i                      sum = Cardid[i] * first[i];
                 }
var result = sum % 11;
var last = stard[result] //最後に計算された ID 番号
; If (cardid[cardid.length - 1].toUpperCase() == last) {
return true;
} else {
return false;
}
}
//日付を文字列に変換し、日付形式を返します 20080808
function dateToString(date) {
if (日付インスタンス) {
var year = date.getFull Year();
var month = date.getMonth() 1;
月 = 月 var day = date.getDate();
日 = 日 年月日を返します;
}
return '';
}
// jquery validate ID 番号の検証
jQuery.validator.addMethod("isIdCard",
関数 (値, 要素) {
return this.optional(element) || (isIdCard(value));
},
"ID 番号が不正です!");
                                                                                         



                                                                              &lt; input class = "submit" type = "submit" value = "submit" /&gt;


                                                                                         




百度百科で提供されている ID 番号 53010219200508011X で確認してください

検証は成功しました。x を 0 に変更してみてください

検証は失敗しましたが、私たちが書いた検証メソッドは成功しました。私の言うことが信じられない場合は、自分の ID 番号を使用してみてください。 js を使用すると ID 番号を確認するのがとても簡単であることがわかりました。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。