
因为我需要升级,验证和查询15位ID卡号,并且找不到现成的功能,所以我自己编写了一个简单的流程,希望能帮助需要帮助的朋友.
此功能的功能是单一的,您只能检查第18个数字是否正确或获取第18个数字,并保留其他功能供大家扩展!
<%
版本: 1.0.1
作者: sfply(sfply@163.com)
最后修改时间: 2004/7/17 12:03
src是ID卡号,可以是15位数字或18位数字,当只有15位数字时,只能通过返回验证码来使用
ichk参数的值为true和false,true表示验证src是否为18位ID卡,并验证第18位是否为正确编号以确定它是否为有效ID卡,以及返回值是true还是false
False表示返回正确的校验码,返回值为(1〜x)
昏暗我的身份
myidentify =“ 36050219781218133?”
response.write chkidentiycard(myidentify,false)
功能chkidentiycard(src,ichk)

dim mywi,myai,mysrc(17),i,mycount
myai =“ 10×98765432”
mywi = split(“ 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2”,“,”)
如果是ichk
如果len(src)= 18,那么
对于i = 0到16
mysrc(i)= mid(src,i + 1,1)
mycount = mycount + mysrc(i)* mywi(i)
下一个
如果mid(myai,(mycount mod 11)+1,1)= right(src,1),则
chkidentiycard = true返回结果,true为合法ID验证码
其他
chkidentiycard = false返回结果,false是非法ID卡的验证码

如果结束
其他
chkidentiycard = false因为它不是18位ID卡,所以返回false
如果结束
其他
如果len(src)= 15或len(src)= 18,则
如果len(src)= 15,则src = mid(src,1,6)&“ 19”&mid(src,7,9)
对于i = 0到16
mysrc(i)= mid(src,i + 1,1)
mycount = mycount + mysrc(i)* mywi(i)
下一个
chkidentiycard = mid(myai,(mycount mod 11)+1,1)返回正确的验证码
其他

chkidentiycard = false,输入的不是15位或18位ID号
如果结束
如果结束
结束功能
%>
关于第18张的计算方法asp 验证号码,原理如下
根据中华人民共和国国家标准gb 11643-1999中关于公民编号的规定,公民编号是多种功能的组合,由17位数字的身体代码和一位数字的验证码组成. 从左到右的排列顺序是: 六位地址码,八位出生日期码,三位顺序码和一位校验码.
地址代码表示编码目标永久居所所在县(市,州asp 验证号码,州,县)的行政区划代码. 生日日期代码表示编码对象的出生年份,月份和日期,其中年份用四位数字表示,并且年份,月份和日期之间没有分隔符. 顺序码表示分配给在同一地址码标识的区域内在同一年,月和日出生的人的顺序号. 序列码的奇数分配给男性,偶数分配给女性. 校验码是根据前面的十七位数字代码和iso 7064: 1983.mod 11-2校验码计算得出的校验码. 以下是计算方法的示例.
首先使用15位ID代码将出生年份扩展为4位数字,最简单的方法是添加19位数字,但这不适用于1900年出生的人(生日星不多)
首先要根据公式calculated计算得出的男性公民的身分代码为34052419800101001.
∑(ai×wi)(mod 11)…………………………(1)
在公式(1)中:
i--指示从左到左的数字字符的序列号,包括校验码;

ai--表示第i个位置的数字字符值;
wi-显示第i个位置的加权因子,其值根据公式wi = 2(n-1)(mod 11)计算.
i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
ai 3 4 0 5 2 4 1 9 8 0 0 1 0 1 0 0 1 a1
wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1
ai×wi 21 36 0 25 16 16 2 9 48 0 0 9 0 5 0 0 2 a1
根据公式(1)计算:
∑(ai×wi)=(21 + 36 + 0 + 25 + 16 + 16 + 2 + 9 + 48 ++ 0 + 0 + 9 + 0 + 5 + 0 + 0 + 2)= 189
189÷11 = 17 + 2/11
∑(ai×wi)(mod 11)= 2
然后根据计算结果,从下表中找到相应的校验码,其中x表示计算结果为10:
∑(ai×wi)(mod 11)0 1 2 3 4 5 6 7 8 9 10
校验和字符值ai 1 0 x 9 8 7 6 5 4 3 2
根据上表,找到了计算结果2的验证码,因此该人的公民编号应为34052419800101001x.
a [0] * 7 + a [1] * 9 + a [2] * 10 + a [3] * 5 + a [4] * 8 + a [5] * 4 + a [6] * 2 + a [7] * 1 + a [8] * 6 + a [9] * 3
+ a [10] * 7 + a [11] * 9 + a [12] * 10 + a [13] * 5 + a [14] * 8 + a [15] * 4 + a [16] * 2
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-259770-1.html
见面会
quot