在网页中经常需要输入正确的身份证号码,只能通过程序来验证身份证格式。根据身份证号码生成的原理,就是验证后面几位就可以了。
<% '身份证校验 Function CheckidCard(idcard) Dim LenCard LenCard=Len(idcard) '判断身份证长度 if not (LenCard = 15 Or LenCard = 18) Then CheckidCard= "身份证长度不是15位或18位" exit Function End If '变量声明区 dim WeightedFactor,VerifyCode,area,birthday,lastnum,Ai,i,Total,Modnum,sex,age,province,sexNum,provinceID WeightedFactor = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2) '为前17位各个数字对应的加权因子 VerifyCode = array(1,0,"x",9,8,7,6,5,4,3,2) '通过模得到的校验码 area="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国外" '判断地区 provinceID=left(idcard,2) if instr(area,provinceID)=0 then CheckidCard= "身份证头2位错误" exit function end If '补齐15位卡号 if LenCard= 15 then idcard=left(idcard,6) & "19" & mid(idcard,7,9) '判断生日 birthday= mid(idcard,7,4)+"-"+mid(idcard,11,2)+"-"+mid(idcard,13,2) if not isdate(birthday) then CheckidCard= "生日非法" exit function end If if datediff("yyyy",cdate(birthday),date())<18 then CheckidCard= "你还未满18岁,不可能有身份证的" exit function end If '判断检验码 if len(idcard)=18 then lastnum=int(right(idcard,1)) 'lastnum为18位身份证最后一位 Ai=left(idcard,17) 'Ai为除最后一位字符的字串 For i = 0 To 16 Total = Total + cint(Mid(Ai,i+1,1)) * WeightedFactor(i) 'Total前17位数字与对应的加权因子积的和 Next Modnum=total mod 11 '此数为模,total除以11后的余数 if VerifyCode(Modnum)<>lastnum then CheckidCard= "最后一位校验码不对" exit function end if end If '计算性别 sexNum=mid(idcard,17,1) sex="男性" if (sexNum mod 2) =0 then sex="女性" '计算年龄 age=datediff("yyyy",cdate(birthday),date()) '计算省份 province=mid(area,instr(area,provinceID)+2,3) province=replace(province,",","") CheckidCard= "恭喜,身份证通过校验<br/>" & "您为:" & sex & ",来自于:" & province & ",生日为:" & birthday End Function %>
建站咨询热线
029-33273980