问题描述
asp.net中,如何用js或类函数来验证输入的身份证号呢?拜托各位高手指点~
解决方案
解决方案二:
3PublicClassSFZ4Private_codeAsString56PublicSubNew(ByValcodeAsString)7_code=code8EndSub910PublicFunctionVerify()AsBoolean11'返回结果12DimresultAsBoolean=False13DimdatestrAsSystem.Text.StringBuilder=NewSystem.Text.StringBuilder1415SelectCase_code.Length16Case1517'取得日期字符串18datestr.Append("19")19datestr.Append(_code.Substring(6,2))20datestr.Append("-")21datestr.Append(_code.Substring(8,2))22datestr.Append("-")23datestr.Append(_code.Substring(10,2))24'判断是否为日期25result=IsDate(datestr.ToString())26Case1827'取得日期字符串28datestr.Append(_code.Substring(6,4))29datestr.Append("-")30datestr.Append(_code.Substring(10,2))31datestr.Append("-")32datestr.Append(_code.Substring(12,2))33'判断是否为日期34result=IsDate(datestr.ToString())35IfresultThen36'判断校验码是否正确37If_code.Substring(17,1)=lastCodeVerify(_code.Substring(0,17))Then38result=True39Else40result=False41EndIf42EndIf43CaseElse44result=False45EndSelect4647Verify=result48EndFunction4950PrivateFunctionlastCodeVerify(ByVala_sfzAsString)AsString51'获得校验码52DimlastcodeAsString53Dimls_sfzAsString54Dimi,li_ai,li_wi,li_sum,li_mod,li_resultAsInteger5556ls_sfz=a_sfz57Ifls_sfz.Length=15Orls_sfz.Length=17Then58Ifls_sfz.Length=15Then59'应该不会执行60ls_sfz=ls_sfz.Substring(0,6)+"19"+ls_sfz.Substring(6,9)61EndIf6263Fori=2To1864li_ai=CInt(ls_sfz.Substring(19-i-1,1))65li_wi=System.Math.Pow(2,i-1)Mod1166li_sum=li_sum+li_ai*li_wi67Next6869li_mod=li_sumMod1170li_result=12-li_mod7172Ifli_result>=10Then73Ifli_result=10Then74lastcode="X"75Else76li_result=li_result-1177lastcode=CStr(li_result)78EndIf79Else80lastcode=CStr(li_result)81EndIf82Else83lastcode="E"84EndIf8586lastCodeVerify=lastcode8788EndFunction89EndClass
解决方案三:
/*身份证判断函数,是返回true,不是返回false15位数字,18位数字或者最后一位为X(大写)*/functionisSFZ(str){if(""==str){returnfalse;}if(str.length!=15&&str.length!=18){//身份证长度不正确returnfalse;}if(str.length==15){if(!isNumber(str)){returnfalse;}}else{str1=str.substring(0,17);str2=str.substring(17,18);alpha="X0123456789";if(!isNumber(str1)||alpha.indexOf(str2)==-1){returnfalse;}}returntrue;}/*
解决方案四:
想验证这个,你必须身份证号的生成规则才行,可是我也不知道啊
解决方案五:
privatestringCheckCidInfo(stringcid){string[]aCity=newstring[]{null,null,null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,null,null,"辽宁","吉林","黑龙江",null,null,null,null,null,null,null,"上海","江苏","浙江","安微","福建","江西","山东",null,null,null,"河南","湖北","湖南","广东","广西","海南",null,null,null,"重庆","四川","贵州","云南","西藏",null,null,null,null,null,null,"陕西","甘肃","青海","宁夏","新疆",null,null,null,null,null,"台湾",null,null,null,null,null,null,null,null,null,"香港","澳门",null,null,null,null,null,null,null,null,"国外"};doubleiSum=0;stringinfo="";System.Text.RegularExpressions.Regexrg=newSystem.Text.RegularExpressions.Regex(@"^d{17}(d|x)$");System.Text.RegularExpressions.Matchmc=rg.Match(cid);if(!mc.Success){return"";}cid=cid.ToLower();cid=cid.Replace("x","a");if(aCity[int.Parse(cid.Substring(0,2))]==null){return"非法地区";}try{DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));}catch{return"非法生日";}for(inti=17;i>=0;i--){iSum+=(System.Math.Pow(2,i)%11)*int.Parse(cid[17-i].ToString(),System.Globalization.NumberStyles.HexNumber);}if(iSum%11!=1)return("非法证号");return(aCity[int.Parse(cid.Substring(0,2))]+","+cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2)+","+(int.Parse(cid.Substring(16,1))%2==1¡"男":"女"));}
解决方案六:
这个好像不知道,想像中不可以实现的办法就是连上公安部的电脑,进行数据比较
解决方案七:
functioncheckIdcard(idcard){varErrors=newArray("验证通过!","身份证号码位数不对!","身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!","身份证地区非法!");vararea={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:"国外"}varidcard,Y,JYM;varS,M;varidcard_array=newArray();idcard_array=idcard.split("");//地区检验if(area[parseInt(idcard.substr(0,2))]==null)returnErrors[4];alert(Errors[4]);//身份号码位数及格式检验switch(idcard.length){case15: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))returnErrors[0];alert(Errors[0]);elsereturnErrors[2];alert(Errors[2]);break;case18://18位身份号码检测//出生日期的合法性检查//闰年月日:((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])returnErrors[0];//检测ID的校验位elsereturnErrors[3];alert(Errors[3]);}elsereturnErrors[2];alert(Errors[2]);break;default:returnErrors[1];alert(Errors[1]);break;}}
解决方案八:
第一个发的是VB的到中国统计网站查询代码
解决方案九:
这些可以用于asp.net么?
解决方案十:
引用8楼xiongrui79的回复:
这些可以用于asp.net么?
当然可以了。正则在哪儿都可以用到
解决方案十一:
2楼的if(""==str)..应该是(str=="")吧..
解决方案十二:
引用10楼xiongrui79的回复:
2楼的if(""==str)..应该是(str=="")吧..
这样也可以
解决方案十三:
感觉主要是两个验证:1.是15位或18位数字的正则表达式的验证2.验证身份证中年月日是正常的年月日的日期验证。
解决方案十四:
用正则表达式1.验证身份证号(18位):^d{}18$2.验证身份证号(15位):^d{15}3.验证身份证号(15位或18位):^d{15}|d{}18$
解决方案十五:
我一直都搞不清楚"^d{15}¦d{}18$"这个到底要怎么用...泪奔...
解决方案:
我在6楼给你提供了正则表达式和用法,自己看看就明白了
解决方案:
//身份证正则表达式(15位)isIDCard1=/^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$/;//身份证正则表达式(18位)isIDCard2=/^[1-9]d{5}[1-9]d{3}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{4}$/;再PS个这个是别人的,我们没有用,更健壮的地区和身份证的关系也判断到还有性别<script>varaCity={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:"国外"}functioncidInfo(sId){variSum=0varinfo=""if(!/^d{17}(d|x)$/i.test(sId))returnfalse;sId=sId.replace(/x$/i,"a");if(aCity[parseInt(sId.substr(0,2))]==null)return"Error:非法地区";sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));vard=newDate(sBirthday.replace(/-/g,"/"))if(sBirthday!=(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()))return"Error:非法生日";for(vari=17;i>=0;i--)iSum+=(Math.pow(2,i)%11)*parseInt(sId.charAt(17-i),11)if(iSum%11!=1)return"Error:非法证号";returnaCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")}</script>