时间:2022-10-28 03:07:42
摘要:根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,针对编译环境,本文用实现身份证号码升位算法。
关键词:;身份证;算法
中图分类号:TP311 文献标识码:A 文章编号:1007-9599 (2011) 18-0000-01
Using to Achieve ID Number Digit Algorithm
Lin Liyun
(Jilin Business and Technology College,Changchun 130062,China)
Abstract:According to Chinese National Standard GB 11643-1999〖〗number in the citizenship requirement for compiler environment,to achieve this using l-bit ID number algorithm.
Keywords:;ID;Algorithm
身份证号码升位的目的主要在于防范“千年虫”;且第二代身份证只是在制作工艺上作了改进,身份证传递的内在信息本身并未发生改变。
根据〖中华人民共和国国家标准GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。前1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。第7~14位数字表示:出生年、月、日;顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。第15、16位数字表示:所在地的派出所的代码;第17位数字表示性别:奇数表示男性,偶数表示女性;校验码是也有的说是个人信息码,主要为了校验计算机输入公民身份号码前17位数字是否正确。其最的作用在于避免身份证号码重复。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
计算校验码的算法:
一、十七位数字本体码加权求和公式
S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
二、计算模
Y=mod(S,11)
三、通过模得到对应的校验码
Y:0 1 2 3 4 5 6 7 8 9 10
校验码:1 0 X 9 8 7 6 5 4 3 2
实现算法代码如下:
Private Function getCheckCode(ByVal SFZH As String)As String
Dim strJiaoYan()As Char={"1","0","X","9","8","7","6","5","4","3","2"}
Dim intQuan()As Integer={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}
Dim strTemp As String
Dim intTemp As String
Dim i As Integer
strTemp=SFZH.Substring(0,6)&"19"&SFZH.Substring(6)
For i=0 To strTemp.Length-1
intTemp=intTemp+Convert.ToInt32(strTemp.Substring(i,1))*intQuan(i)
Next
intTemp=intTemp Mod 11
Return strTemp&strJiaoYan(intTemp)
End Function
参考文献:
[1]罗朝盛.Visual Basic 6.0程序设计基础教程.2005
[2]谭浩强.Visual Basic程序设计.2006