一个18位身份证校验计算函数
因需要对15位旧身份证号码进行升位和校验、查询处理,又没有搜索到现成的函数,于是自己写了一个简单的过程,希望能够帮得上需要的朋友。本函数的功能单一,只能校验第18位号码是否正确或者取得第18位号码,其他功能留给大家自己扩展吧!
<%
' Version: 1.0.1
' Author: sfply(sfply@163.com)
' Last Modified: 2004/7/17 12:03
' Src是身份证号码,可以是15位也可以是18位,15位时只能返回验证码方式使用
' iChk参数取值真假,真代表校验Src是否18位身份证,并且校验第18位是否正确号码而确定是否有效身份证,返回只值为true或false
' 假代表返回正确的校验码,返回值为(1~x)
dim myIdentify
myIdentify = "36050219781218133?"
response.write chkIdentiyCard(myIdentify,false)
Function chkIdentiyCard(Src,iChk)
dim myWi,myAi,mySrc(17),i,myCount
myAi = "10X98765432"
myWi = split("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2",",")
if iChk then
if len(Src) = 18 then
for i = 0 to 16
mySrc(i) = mid(Src,i+1,1)
myCount = myCount + mySrc(i) * myWi(i)
next
if mid(myAi,(mycount mod 11)+1,1) = right(Src,1) then
chkIdentiyCard = true '返回结果,TRUE为合法身份证验证码
else
chkIdentiyCard = false '返回结果,FALSE为非法身份证验证码
end if
else
chkIdentiyCard = false '因为不是18位身份证所以返回FALSE
end if
else
if len(Src) = 15 or len(Src) = 18 then
if len(Src) = 15 then Src = mid(Src,1,6) & "19" & mid(Src,7,9)
for i = 0 to 16
mySrc(i) = mid(Src,i+1,1)
myCount = myCount + mySrc(i) * myWi(i)
next
chkIdentiyCard = mid (myAi,(mycount mod 11)+1,1) '返回正确的验证码
else
chkIdentiyCard = false '输入不不是15位或18位身份证号
end if
end if
End Function
%>
关于身份证第18是怎么计算的,原理如下
根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
补充:asp教程,高级应用