ナンセンスが少なく、コードを直接置くだけで、コメントの解析は非常に明確であるため、ここにはBBはありません。
コードコピーは次のとおりです。
/*
中華人民共和国の国家標準GB 11643-1999の市民権のアイデンティティ番号に関する規定によると、市民権のアイデンティティ番号は、17桁のデジタルオントロジーコードと1桁の検証コードで構成される特徴的な組み合わせコードです。アレンジメント順序は、左から右にあります。6桁のアドレスコード、8桁の生年月日コード、3桁のシーケンスコード、1桁の検証コード。
アドレスコードは、コード化されたオブジェクトの永久居住地がある郡(市、バナー、および地区)の行政部門コードを表します。
生年月日は、エンコードされたオブジェクトの出生の年、月、日を表し、年は4桁で表され、年、月、日の間にセパレーターはありません。
シーケンスコードは、同じアドレスコードで識別されたエリア内の同じ年、月、日に生まれた人に割り当てられたシーケンス番号を表します。注文コードの奇数は男性に割り当てられ、偶数が女性に割り当てられます。
検証コードは、最初の17桁のコードに基づいて計算され、ISO 7064:1983.mod 11-2の検証コードに従って計算された検証コードです。
生年月日の計算方法。
BITのIDカードコードは最初に出生年を4ビットに拡大し、1800年から1999年の間に生まれたすべての人を含む19または18を追加するだけです。
新年以降に生まれたものは18歳でなければならず、そのような心配はありません。 1、800年前に生まれた人たちについては、当時はID番号がないはずです、⊙⊙BKhan ...
以下は正規表現です。
生年月日(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):
i -----検証コードを含む左からの数値文字の数値シーケンス番号を示します。
ai ---- i番目の位置での数値文字値を表します。
wi ----- ITH位置での重み係数を示し、その値は式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番号をサポートします
//サポートアドレスエンコーディング、生年月日、およびチェックディジットの検証
関数IdentityCodevalid(code){
var City = {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: "Guangdong"、45: "Guangxi"、46: "Hainan"、50: "Chongqing"、51: "sichuan"、52: "guizhou"、53: "yun Nan "、54:" Tibet "、61:" shaanxi "、62:" gansu "、63:" Qinghai "、64:" ningxia "、65:" Xinjiang "、71:" Taiwan "、81:" Hong Kong "、82:" Macao "、91:" Foreign "};
var tip = "";
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){
tip = "識別カード番号フォーマットエラー";
pass = false;
}
else if(!city [code.substr(0,2)]){
tip = "アドレスエンコーディングエラー";
pass = false;
}
それ以外{
// 18桁のIDカードを最後のチェックビットで検証する必要があります
if(code.length == 18){
code = 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 parity = [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 <17; i ++)
{
ai = code [i];
wi = factor [i];
sum += ai * wi;
}
var last = parity [sum%11];
if(parity [sum%11]!= code [17]){
tip = "ビットエラーを確認します";
pass = false;
}
}
}
if(!pass)alert(tip);
パスを返す;
}
var c = '130981199312253466';
var res = IdentityCodevalid(c);
それはどうですか?これは、非常に包括的な最初のID番号検証コードです。オンラインで検索した他の検証コードと同じ次元ではありません。必要に応じて奪ってください。