ID番号の確認(JS)

VaRのvcity = {
11: "北京"、
12: "天津"、
13: "河北"、
14 "山西のジャーナル"、
15: "内モンゴル"、
21: "遼寧"、
22: "吉林"、
23:「SCIENCE "
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: 「外国」
}

CheckIDCard機能(カード){
//が空
IF(カード===「」){
アラート(「入力されたID番号、ID番号は」空にすることはできませんしてください);
falseに戻り;
}
//長さを確認し、タイプ
IF(isCardNo(カード)===偽){
アラート( 'あなたが入力したIDカード番号が間違っている、もう一度試してください');
リターン偽;
}
//は州をチェックする
(checkProvince(カード)=== falseの場合 ){
警告(「あなたが入力したIDカード番号が間違っている、もう一度試してください」);
リターン偽;
}
//チェック誕生日
IF(checkBirthday(カード)===偽){
警告(「あなたは、ID番号の誕生日を入力しないでください正しい、再入力してください「);
falseに復帰;
}
//チェックビット検出器
IF(checkparity(カード)=== falseに){
アラート(」あなたのIDパリティビットが正しくない、再入力してください「);
リターンfalseに;
}
アラート( 'OK');
trueに復帰。
}

//長さ、タイプ、仕様の数、かどうかをチェックし
isCardNo =関数(カード){
//識別番号が15または18であるが、最後のものは、デジタルフロント17に全ての数15、18である場合パリティビットは、数字や文字X-であってもよい
VAR = REG /(^ \ D {15} $)| / |(^ \ {D} 17(\ D X-)$である。);
IF(reg.test(カード)=偽==){に
偽に戻り;
}

return true;

}

//取得最初の2つの識別チェックサム州
checkProvince =関数(カード){
省card.substr VAR =(0、2);
IF(vcity [省] ==未定義){
falseに戻り;
}
真への復帰;
}

誕生の正確な日付かどうかを//チェック
checkBirthday =機能(カード){
VARのlen = card.length;
// IDカード15、州の順(3)市(3)年(2)月(2) 1999(2)パリティビット(3)、すべてデジタルである
IF(LEN == '15'){
VARのre_fifteen = / ^(\ 6 {D})(\ D {2})(\ D {2 })(\ D {2})(\ {D} 3)$ /;
VAR = arr_data card.match(re_fifteen);
VAR = arr_data年[2];
VAR =月arr_data [3];
VAR日= arr_data [ 4];
VAR =新しい新しい誕生日('19 '年+ +' / '+月+' / '+日);
リターンverifyBirthday(' 19' +年、月、日、誕生日);
}
//アイデンティティ18位置、州の順(3)市(3)年間(4)ヶ月(2)日(2)パリティビット(4)、パリティビットの終了X-かもしれ
IFは(LEN == '18)は{である
[(VARのre_eighteen = / ^(\ 6 {D})(\ 4 {D})(\ D {2})(\ D {2})(\ {D}。3)0-9 ] | X-)$ /;
VAR = arr_data card.match(re_eighteen)。
VAR年= arr_data [2]。
VAR月= arr_data [3]。
VAR日= arr_data [4]。
VAR誕生日=新しい日付(年+ '/' +月+ '/' +日)。
verifyBirthday(年、月、日、誕生日)を返します。
}
falseを返します。
}

//校正日
verifyBirthday =機能(年、月、日、誕生日){
VAR今=新しい新しいA日付();
VAR now_year now.getFullYear =();
//日付が妥当である
(birthday.getFullYear(あれば)=年&& =(birthday.getMonth(1)+。)&& birthday.getDate月==()==日){
100年の間)3年//年の判決(
now_year VAR時間= -年;
IF(時間> = 3 &&時間<= 100){
trueにリターン;
}
偽に戻り;
}
偽に戻ります;
}

//校验位的检测
checkParity =関数(カード){
// 15位转18位
カード= changeFivteenToEighteen(カード)。
VAR LEN = card.length。
IF(LEN == '18'){
VAR arrInt =新しいアレイ(7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2) ;
VAR arrCh =新しいArray( '1'、 '0'、 'X'、 '9'、 '8'、 '7'、 '6'、 '5'、 '4'、 '3'、 '2') ;
VAR cardTemp = 0、
I、valnum。
ための式(I = 0; iが<17; I ++){
cardTemp + = card.substr(I、1)* arrInt [I]。
}
valnum = arrCh [cardTemp%11]。
IF(valnum == card.substr(17、1)){
trueを返します。
}
falseを返します。
}
falseを返します。
}

// 15位转18位身份证号
changeFivteenToEighteen =関数(カード){
IF(card.length == '15'){
VAR arrInt =新しいアレイ(7、9、10、5、8、4、2、1 、6、3、7、9、10、5、8、4、2)。
VAR arrCh =新しいArray( '1'、 '0'、 'X'、 '9'、 '8'、 '7'、 '6'、 '5'、 '4'、 '3'、 '2') ;
VAR cardTemp = 0、
I。
カード= card.substr(0,6)+ '19' + card.substr(6、card.length - 6)。
ための式(I = 0; iが<17; I ++){
cardTemp + = card.substr(I、1)* arrInt [I]。
}
カード+ = arrCh [cardTemp%11]。
カードを返します。
}
カードを返します。
}

おすすめ

転載: www.cnblogs.com/hjworld/p/12123454.html