function checkIdcard(idcard){
var Errors= new Array(
"認証に合格しました",
"ID 番号の桁数が間違っています!",
"ID 番号の生年月日が範囲外か、不正な文字が含まれています!" ,
"ID 番号認証エラーです! ",
"ID カードのエリアが不正です!"
);
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 idcard,Y,JYM;
var idcard_array = new Array();
//エリアチェック
(area[parseInt(idcard.substr(0,2) )]==null) return Errors[4];
//ID 番号の桁数と形式チェック
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)) return Errors[0]
else return Errors[2]; Break;
ケース 18:
// 18 桁の ID 番号検出
// 生年月日の正当性チェック
// 閏年、月、日: ((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 = (parseInt(idcard_array[0]) parseInt(idcard_array[10 ])) * 7
(parseInt(idcard_array[1]) parseInt(idcard_array[11])) * 9
(parseInt(idcard_array[2]) parseInt(idcard_array[12])) * 10
(parseInt(idcard_array[3]) parseInt(idcard_array[13])) * 5
(parseInt(idcard_array[4]) ]) parseInt(idcard_array[14])) * 8
(parseInt(idcard_array[5]) parseInt(idcard_array[15])) * 4
(parseInt(idcard_array[6]) parseInt(idcard_array[16] )) * 2
parseInt(idcard_array[7]) * 1
parseInt(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] ) return Errors[0]; //ID のチェックデジットを検出します
else return Errors[3 ]
}
else return Errors[2];
return エラー[1];
break
}
}