分享
 
 
 

一个18位身份证校验计算函数

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

因需要对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〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面举例说明该计算方法。

15位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19,但是这对于1900年出生的人不使用(这样的寿星不多了)

某男性公民身份号码本体码为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

%11

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有