原文链接:js最全身份证号码验证函数validateIdCard(idCard){letvcity={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:"海外"};//是否为空if(idCard===""){returnfalse;}//检查长度,类型if(isCardNo(idCard)===false){returnfalse;}//检查省份if(checkProvince(idCard,vcity)===false){returnfalse;}//检查生日if(checkBirthday(idCard)===false){returnfalse;}//校验位检测if(checkParity(idCard)===false){returnfalse;}returntrue;}//校验号码长度,TypefunctionisCardNo(card){//身份证号为15位或18位,//当15位全为数字时,18位的前17位为数字,//最后一位是校验位,可以是数字或字符Xletreg=/(^\d{15}$)|(^\d{17}(\d|X|x)$)/;returnreg.test(card)}//检查省份,取数字的前两位functioncheckProvince(card,vcity){letprovince=card.substr(0,2);如果(vcity[省]==undefined){returnfalse;}返回真;}//验证日期functionverifyBirthday(year,month,day,birthday){letdate=newDate();//验证日期if(birthday.getFullYear()==year&&(birthday.getMonth())+1)==month&&birthday.getDate()==day){//确定年份的范围(0到100岁)设time=date.getFullYear()-year;如果(时间>=0&&时间<=100){返回真;}返回假;}returnfalse;}//验证生日函数checkBrithday(card){letlen=card.length;//当身份证有15位时,//顺序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),//全部numbersif(len=="15"){letre_fifteen=/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;让arr_data=card.match(re_fifteen);让year=arr_data[2];让月=arr_data[3];让天=arr_data[4];letbirthday=newDate("19"+year+'/'+month+'/'+day);returnverifyBirthday("19"+年、月、日、生日);}//当身份证为18位时,//顺序为省(3位)、市(3位)、年(4位)、月(2位)、日(2位)校验位(4位)),//校验位的末尾可能是Xif(len=="18"){letre_eighteen=/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X|x)$/;让arr_data=card.match(re_eighteen);设年份=arr_data[2];让月=arr_data[3];让天=arr_data[4];letbirthday=newDate(year+'/'+month+'/'+day);returnverifyBirthday(年,月,日,生日);}returnfalse;}//15位转18位身份证号码functionchangeFiveteenToEighteen(card){if(card.length=="15"){letarrInt=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];让arrCh=[“1”、“0”、“X”、“9”、“8”、“7”、“6”、“5”、“4”、“3”、“2”];让cardTemp=0,i;card=card.substr(0,6)+"19"+card.substr(6,card.length-6);对于(i=0;i<17;i++){car??dTemp+=card.substr(i,1)*arrInt[i];}卡+=arrCh[cardTemp%11];返还卡;}returncard;}//检测校验位functioncheckParity(card){//15位转18位card=changeFiveteenToEighteen(card);让len=card.length;如果(len=="18"){让arrInt=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];让arrCh=[“1”、“0”、“X”、“9”、“8”、“7”、“6”、“5”、“4”、“3”、“2”];让cardTemp=0,i,valnum;对于(i=0;i<17;i++){car??dTemp+=card.substr(i,1)*arrInt[i];}valnum=arrCh[cardTemp%11];如果(valnum==card.substr(17,1).toLocaleUpperCase()){返回真;}返回假;}返回假;}
