vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别
作者 佚名
来源 ASP编程
浏览
发布时间 2013-07-09
工作中需要用到身份证验证,还要支持检查15位和18位。 我一时手懒,问同事有没有现成的函数可用,同事google了一下,扔给我一个asp-vbscript版本的函数。 可我这边是客户端javascript呀,于是用改vbs-->js 改完发现蛮好用的,同时发现vbscript真的很啰嗦,居然写了50多行,我改成js只用了11行。 当然,我并完全是指vbscript啰嗦,那个写这段vbs代码的无名氏也是个唐僧性格..... 先放出vbscript代码, 复制代码 代码如下: <scriptlanguage="vbscript"> ''功能:检查身份证号码 FunctionCheckCardId(e) arrVerifyCode=Split("1,0,x,9,8,7,6,5,4,3,2",",") Wi=Split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2",",") Checker=Split("1,9,8,7,6,5,4,3,2,1,1",",") IfLen(e)<15OrLen(e)=16OrLen(e)=17OrLen(e)>18Then CheckCardId="身份证号共有15码或18位" CheckCardId=False ExitFunction EndIf DimAi IfLen(e)=18Then Ai=Mid(e,1,17) ElseIfLen(e)=15Then Ai=e Ai=Left(Ai,6)&"19"&Mid(Ai,7,9) EndIf IfNotIsNumeric(Ai)Then CheckCardId="身份证除最后一位外,必须为数字!" ExitFunction EndIf DimstrYear,strMonth,strDay strYear=CInt(Mid(Ai,7,4)) strMonth=CInt(Mid(Ai,11,2)) strDay=CInt(Mid(Ai,13,2)) BirthDay=Trim(strYear)+"-"+Trim(strMonth)+"-"+Trim(strDay) IfIsDate(BirthDay)Then IfDateDiff("yyyy",Now,BirthDay)<-140orcdate(BirthDay)>date()Then CheckCardId="身份证输入错误!" ExitFunction EndIf IfstrMonth>12OrstrDay>31Then CheckCardId="身份证输入错误!" ExitFunction EndIf Else CheckCardId="身份证输入错误!" ExitFunction EndIf Dimi,TotalmulAiWi Fori=0To16 TotalmulAiWi=TotalmulAiWi+CInt(Mid(Ai,i+1,1))*Wi(i) Next DimmodValue modValue=TotalmulAiWiMod11 DimstrVerifyCode strVerifyCode=arrVerifyCode(modValue) Ai=Ai&strVerifyCode CheckCardId=Ai IfLen(e)=18Ande<>AiThen CheckCardId="身份证输入错误!" ExitFunction EndIf EndFunction </script> 再放出javascript版本代码 复制代码 代码如下: functioncheckId(pId){ //检查身份证号码Go_Rush(阿舜)fromhttp://ashun.cnblogs.com vararrVerifyCode=[1,0,"x",9,8,7,6,5,4,3,2]; varWi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]; varChecker=[1,9,8,7,6,5,4,3,2,1,1]; if(pId.length!=15&&pId.length!=18)return"身份证号共有15码或18位"; varAi=pId.length==18?pId.substring(0,17):pId.slice(0,6)+"19"+pId.slice(6,16); if(!/^\d+$/.test(Ai))return"身份证除最后一位外,必须为数字!"; varyyyy=Ai.slice(6,10),mm=Ai.slice(10,12)-1,dd=Ai.slice(12,14); vard=newDate(yyyy,mm,dd),now=newDate(); varyear=d.getFullYear(),mon=d.getMonth(),day=d.getDate(); if(year!=yyyy||mon!=mm||day!=dd||d>now||year<1940)return"身份证输入错误!"; for(vari=0,ret=0;i<17;i++)ret+=Ai.charAt(i)*Wi[i]; Ai+=arrVerifyCode[ret%=11]; returnpId.length==18&&pId!=Ai?"身份证输入错误!":Ai; }; 至于身份证算法的原理,请参阅:http://www.google.com/ 最后,根据身份证号码取省份,生日,性别就很简单了 复制代码 代码如下: <scriptlanguage="javascript"> varid="342201570202003" //根据身份证取省份,生日,性别Go_Rush(阿舜)fromhttp://ashun.cnblogs.com/ functiongetInfo(id){ vararr=[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,"国外"] id=checkId(id) if(isNaN(id))return"错误的身份证号码" varid=String(id),prov=arr[id.slice(0,2)],sex=id.slice(14,17)%2?"男":"女" varbirthday=(newDate(id.slice(6,10),id.slice(10,12)-1,id.slice(12,14))).toLocaleDateString() return[prov,birthday,sex] } alert(getInfo(id)) </script> 上 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用vbs实现禁用服务下一篇: 用vbs实现配置静态 IP 地址
关于vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别的所有评论