Javascript検証身分証明書の正当性

著者:スマートツールライブラリ 公開日時:2022-02-25 21:35:00 文字数:3180 読む:12539次

次のコードをプロジェクトにコピーし、checkIdcardメソッドを直接呼び出して身分証明書番号を渡し、「検証に合格!」と返すと 身分証明書番号によると合法である。

# GoogleAD #

Function checkIdcard(idcard) {
Var Errors = new Array (
「検証に合格しました! ",
「身分証明書番号の桁数は間違っています! ",
"身分证明书番号の生年月日が范囲外か不正な文字が含まれています! ",
「身分証明書番号チェックエラー! ",
「身分証地区は不法です。 "
);
Var area = { 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: 「海外」 }
Var retflag = false;
Var idcard, Y, JYM;
Var S, M;
Var idcard_array = new Array();
Idcard_array = idcard.split("");
// 地域検査
If (area[parseInt(idcard.substr(0, 2))] = = null) returerrors [4];
// 身分番号の桁数と書式検査
Switch (idcard.length) {
Case 15:
If (((parseInt(idcard.substr(6, 2)) + 1900) % 4 = = 0 | | ((parseInt(idcard.substr(6, 2)) + 1900) %
100 = = 0 & & (parseInt(idcard.substr(6, 2)) + 1900) % 4 = = 0)) {
Ereg = /^[1-9][0-9]{5}[0-9]{2}((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 生年月日の合法性をテストする
} Else {
Ereg = /^[1-9][0-9]{5}[0-9]{2}((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]| 1[0-9]| 2[0-8]))[0-9]{3}$/;// 生年月日の合法性をテストする
}
If (ereg.test(idcard))
Returerrors [0];
Else {
Returerrors [2];
}
ブレイク;
Case 18:
// 18桁の身分番号検査
// 生年月日の合法性検査
// うるう年月日 :((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]|[1-2][0-9]))
// 平年月日 :((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]| 1[0-9]| 2[0-8]))
If (parseInt(idcard.substr(6, 4)) % 4 = = 0 | | (parseInt(idcard.substr(6, 4))) % 100 = = 0 & &
ParseInt (idcard.substr(6, 4)) % 4 = = 0)) {
Ereg = /^[1-9][0-9]{5}19[0-9]{2}((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// うるう年の生年月日の合法性正規表現
} Else {
Ereg = /^[1-9][0-9]{5}19[0-9]{2}((01 | 03 | 05 | 07 | 08 | 10 | 12)(0[1-9]|[1-2][0-9]| 3[0-1])|(04 | 06 | 09 | 11)(0[1-9]|[1-2][0-9]| 30)| 02(0[1-9]| 1[0-9]| 2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年の生年月日の合法性正規表現
}
If (ereg.test(idcard)) {// 出生日の正当性をテストする
// チェックポイントの計算
S = (パーセント (idcard_array[0]) + パーセント (idcard_array[10])) * 7
+ (パーセント (idcard_array[1]) + パーセント (idcard_array[11])) * 9
+ (パーセント (idcard_array[2]) + パーセント (idcard_array[12])) * 10
+ (パーセント (idcard_array[3]) + パーセント (idcard_array[13])) * 5
+ (パーセント (idcard_array[4]) + パーセント (idcard_array[14])) * 8
+ (パーセント (idcard_array[5]) + パーセント (idcard_array[15])) * 4
+ (パーセント (idcard_array[6]) + パーセント (idcard_array[16])) * 2
+ パーセント (idcard_array[7]) * 1
+ パーセント (idcard_array[8]) * 6
+ ParseInt (idcard_array[9]) * 3;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y, 1);// チェックポイントを判断する
If (M = = idcard_array[17]) returerrors [0]; // 検出IDのチェックポイント
Else returerrors [3];
}
アウトリガーErrors[2];
ブレイク;
デフォルト:
Returerrors [1];
ブレイク;
}
}

オリジナル内容、転載は出典を明記してください:スマートツールライブラリ

コメント (合計 0条)

提案とフィードバック お問い合わせ