在網(wǎng)頁中經(jīng)常需要輸入正確的身份證號碼,只能通過程序來驗證身份證格式。根據(jù)身份證號碼生成的原理,就是驗證后面幾位就可以了。
<% '身份證校驗 Function CheckidCard(idcard) Dim LenCard LenCard=Len(idcard) '判斷身份證長度 if not (LenCard = 15 Or LenCard = 18) Then CheckidCard= "身份證長度不是15位或18位" exit Function End If '變量聲明區(qū) 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位各個數(shù)字對應(yīng)的加權(quán)因子 VerifyCode = array(1,0,"x",9,8,7,6,5,4,3,2) '通過模得到的校驗碼 area="11北京,12天津,13河北,14山西,15內(nèi)蒙古,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國外" '判斷地區(qū) 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位數(shù)字與對應(yīng)的加權(quán)因子積的和 Next Modnum=total mod 11 '此數(shù)為模,total除以11后的余數(shù) 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