作者:admin 时间:2005-2-28 来自:ASP教程
本函数的功能单一,只能校验第18位号码是否正确或者取得第18位号码,其他功能留给大家自己扩展吧!
' Version: 1.0.1
' Author: sfply([email]sfply@163.com[/email])
' Last Modified: 2004/7/17 12:03
' Src是×××号码,可以是15位也可以是18位,15位时只能返回验证码方式使用
' iChk参数取值真假,真代表校验Src是否18位×××,并且校验第18位是否正确号码而确定是否有效×××,返回只值为true或false
' 假代表返回正确的校验码,返回值为(1~x)
dim myIdentify
myIdentify = "36050219781218133?"
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
%>
i----表示号码字符从由至左包括校验码在内的位置序号;
ai----表示第i位置上的号码字符值;
Wi----示第i位置上的加权因子,其数值依据公式Wi=2(n-1)(mod 11)计算得出。
校验码字符值ai 1 0 X 9 8 7 6 5 4 3 2
根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001X。
+a[10]*7+a[11]*9+a[12]*10+a[13]*5+a[14]*8+a[15]*4+a[16]*2
%11