当前位置: 首页 > Web前端 > HTML5

身份证准确验证方法

时间:2023-04-05 17:11:27 HTML5

functioncheckIdcard(personnumber){personnumber=personnumber.toUpperCase()//身份证号为15位或18位,当15位全为数字时,18位前17位为数字,最后一位是校验位,可以是数字,也可以是字符X。if(!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(personnumber))){returnfalse}//校验位根据ISO7064:1983.MOD11-2的规定生成,X可以认为是数字10。//日期下面分别分析出生和校验位varlen,relen=personnumber.lengthif(len==15){re=newRegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)vararrSplit=personnumber.match(re)//检查生日日期是否正确vardtmBirth=newDate('19'+arrSplit[2]+'/'+arrSplit[3]+'/'+arrSplit[4])varbGoodDaybGoodDay=(dtmBirth.getFullYear()==Number(arrSplit[2]))&&((dtmBirth.getMonth()+1)==Number(arrSplit[3]))&&(dtmBirth.getDate()==Number(arrSplit[4]))if(!bGoodDay){returnfalse}else{//15位身份证转18位//校验位根据ISO7064:1983.MOD11-2的规定生成,X可以认为是数字10。vararrInt=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)vararrCh=newArray('1','0','X','9','8','7','6','5','4','3','2')varnTemp=0;varipersonnumber=personnumber.substr(0,6)+'19'+personnumber.substr(6,personnumber.length-6)for(i=0;i<17;i++){nTemp+=personnumber.substr(i,1)*arrInt[i]}personnumber+=arrCh[nTemp%11]returntrue}}if(len==18){re=newRegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)vararrSplit=personnumber.match(re)//检查生日日期是否为正确的vardtmBirth=newDate(arrSplit[2]+'/'+arrSplit[3]+'/'+arrSplit[4])varbGoodDaybGoodDay=(dtmBirth.getFullYear()==Number(arrSplit[2]))&&((dtmBirth.getMonth()+1)==Number(arrSplit[3]))&&(dtmBirth.getDate()==Number(arrSplit[4]))if(!bGoodDay){returnfalse}else{//校验18位身份证校验码是否正确。//根据ISO7064:1983.MOD11-2的规定生成校验位,X可以认为是数字10varvalnumvararrInt=newArray(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)vararrCh=newArray('1','0','X','9','8','7','6','5','4','3','2')varnTemp=0;varifor(i=0;i<17;i++){nTemp+=personnumber.substr(i,1)*arrInt[i]}valnum=arrCh[nTemp%11]if(valnum!=personnumber.substr(17,1)){返回假}返回真}}返回假}