手机
当前位置:查字典教程网 >脚本专栏 >vbs >vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别
vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别
摘要:工作中需要用到身份证验证,还要支持检查15位和18位。我一时手懒,问同事有没有现成的函数可用,同事google了一下,扔给我一个asp-vb...

工作中需要用到身份证验证,还要支持检查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>

上面的代码只能取到省份,要取到具体城市,请看我的另外一个随笔,

代码只拿我和几个同事的身份证号码测了一下,如果有Bug,请指出

【vbscript和javascript版的15位, 18位的身份证号码的验证函数.以及根据身份证取省份,生日,性别】相关文章:

用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点

用VBS修改远程桌面3389端口并添加到Windows防火墙的代码

VBS教程:函数-CByte 函数

vbs 百度小助手

VBS加密与VBE解密实现方法

SendKeys clip.exe 发送中文的代码

用VBS修改IIS Metabase的代码

用vbs读取Excel文件的函数代码

完整的注册表操作实例 VBS脚本

右键发送(sendto),创建快捷方式到自定义的位置 的vbs

精品推荐
分类导航