<script> <br> function checkIdcard(idcard1){ <br> var idcard=document.forms[0].elements[idcard1].value; <br> var Errors=new Array( <br> "認証に合格しました!", <br> "ID カード番号番号が違います!」、<br>「ID カード番号の生年月日が範囲外または不正な文字が含まれています!」、<br>「ID カード番号の認証エラーです!」、<br>「ID カードの領域が不正です!」 <br> ); <br> 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:"外国"} <br> var idcard,Y,JYM; <br> var idcard_array = new Array(); (""); <br> /*地域検査*/ <br> if(area[parseInt(idcard.substr(0,2))]==null) <br>alert(Errors[4]) <br> return false; <br> /*ID 番号の桁と形式のチェック*/ <br> switch(idcard.length){ <br> case 15: <br> 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 )){ <br> 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}$/;//生年月日の正当性をテストします <br> } else { <br> 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}$/;//生年月日の正当性をテストします <br> } <br> if(ereg.test(idcard)){ <br>alert(Errors[ 0]+"15"); <br> return false <br> } <br> else { <br> return false; <br> <br> case 18: <br> //18 桁の ID 番号の検出<br> //生年月日の正当性チェック <br> //閏年、月、日 :((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])) <br> //平年月日: ((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]) ) <br> if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6,4) )%4 == 0 )){ <br> 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]$/;//閏年 生年月日の法的な正規表現 <br> } else { <br> 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] $/;//平年における生年月日の正規表現<br> } <br> if(ereg.test(idcard)){//Test生年月日の正当性<br> //チェックデジットを計算します<br> S = (parseInt(idcard_array[ 0]) + parseInt(idcard_array[10])) * 7 <br> + (parseInt(idcard_array[1]) + parseInt(idcard_array[ 11])) * 9 <br> + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 <br> + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 <br> + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 <br> + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 <br> + (parseInt(idcard_array[6] ) + parseInt(idcard_array[16])) * 2 <br> + parseInt(idcard_array[7]) * 1 <br> + parseInt(idcard_array[8]) * 6 <br> + parseInt(idcard_array[9]) * 3 ; <br> Y = S % 11; <br> M = 「F」; <br> JYM = 「10X98765432」; <br> M = JYM.substr(Y,1);/*判断校验位*/ <br> if(M == idcard_array[17]){ <br> alert(Errors[0]+"18"); <br> falseを返します。 /*检测ID的校验位*/ <br> } <br> else { <br> alert(Errors[3]); <br> falseを返します。 <br> } <br> } <br> else { <br> alert(Errors[2]); <br> falseを返します。 <br> } <br> 休憩; <br> <br> デフォルト: <br> alert(Errors[1]); <br> falseを返します。 <br> <br> } <br> </script>