身份证号码的秘密

2024-05-23

身份证号码的秘密(共6篇)

身份证号码的秘密 篇1

1 引言

日常生活中很多场合都需要对身份证进行检查,并需要人工输入身份证号码,比如酒店入住、办理银行业务、机票预订等,二代身份证号码位数多达18位,人工输入难免会出错而且速度慢。利用Android操作系统自带的摄像头功能,结合数字图像处理技术对身份证图像进行自动识别,可以显著提高效率。本文在Android开发平台上,提出一种有效的二代身份证号码识别算法,从而实现身份证号码的自动化输入。

2 身份证号码识别算法总体流程

本文根据身份证的特点,采用如图1所示的流程来实现身份证号码的识别。利用Android系统自带摄像头功能获取图片,将图像由彩色图转为灰度图,为了将目标数字与背景区分开对图像进行二值化处理,而我们感兴趣的是身份证的数字区域,所以接下来要进行有效区域定位,由于人工拍摄的角度等问题会使得到的图片存在一定程度的倾斜所以要进行倾斜矫正处理,然后进行字符分割得到单个字符的图片,最后进行逐个字符识别,输出识别结果。本文的图像处理是基于数字图像处理开源计算机视觉库Open CV平台上开发的。

3 图像的获取

本文通过基于Android操作系统的智能手机,利用视频流捕捉图片,将其作为要处理的输入图像。图2所示为图像采集过程中的一张示意图,长方形的高亮区是照片有效区,算法处理的输入图片是高亮区的图像。正确的获取图片方法是,让长方形亮区包含身份证号码的所有数字。考虑到不同手机分辨率的差异,本文将获取的图片统一压缩为480*70大小。图3给出最终输入图片示意图。

4 图像预处理

鉴于本文是在开源计算机视觉库Open CV的平台上开发的,所以采用函数void cv Cvt Color(const Cv Arr*src,CvArr*dst,int code)实现,结果如图4所示。然后经过二值化处理,将背景与目标分离,结果如图5所示。接着采用连通区域标记算法去除二值化图像中的噪点,结果如图6所示。

5 区域定位

5.1 确定上下边界

对于身份证图像,我们感兴趣的只是其数字区域。在以上各步处理的基础上,本文借鉴文献[1]的思想确定身份证号码区域的上下边界。

1)对图6的二值图像从上到下逐行扫描,每一行从白变到黑或从黑变到白都记为一次灰度跳变,记录每一行的灰度跳变次数为D(i),i=1,2,…,N.然后从上到下寻找D(i)最大的行,记为:D(max),即跳变次数最大行的位置;因为号码区是由一个个分离的数字组成,根据身份证的特点,D(max)所在的行线一定穿过各个身份证数字。

2)从max行开始分别向上、下两边搜索,设字符跳变最小次数的阈值为2,即跳变次数不大于2的扫描行不属于号码区域,由此可以确定号码区域的上下边界。区域定位结果如图7所示。

3)一般身份证号码包含18个字符,每个字符至少会出现2次跳变。理论上可以将字符跳变最小次数的阈值设为18*2=36,但是考虑到实际应用中(1)经上面步骤处理后各个字符之间可能存在高度差异;(2)由于是人工操作可能存在数字区域倾斜的现象;(3)经过连通小区域去除数字区域的上方是空白或边界,数字区域的下方是空白或边界。所以将最小阈值设为2。

5.2 确定左右边界

分析图7发现:(1)中间位置一定位于身份证号码区;(2)号码区各个数字字符之间的空白间隔较小。所以本文采取的方法是:对图7进行垂直投影,然后从中间位置开始分别向左方和右方扫描,直到相邻两个投影区间有跨度较大的间隔或是遇到边界,记录下此时的位置,从而确定出号码区的左右边界。经左右边界确定后的最终区域定位示意图如图8所示。

6 字符分割

对图8做垂直投影,从左到右扫描,记录下每个空白的分割点,从而对图像进行准确分割,分割后的图像如图9所示。

7 字符识别

二代身份证号码由字体为OCR-B 10 BT的0~9这10个数字和字体为华文细黑的字符X构成,均属于印刷体字符,所以本文采用简单且高效的模板匹配法进行识别。通过双线性插值算法将分割得到的单个字符图片归一化为32*44大小,如图10所示,本文采用的模板图片如图11所示。

采用模板匹配的计算公式如(1)式所示。其中,S为待识别图像,T为模板图像,因为是二值图像,所以只存在灰度值为0和1的像素点。将待识别字符图像分别与各个模板图像的有效信息区(黑色区域)比较,计算两者有效信息区的匹配度,记为R i,其中i=0,1,...,9,1 0;匹配系数较大的为最佳匹配模板。当然为了保证识别有效当最高匹配系数不大于0.7时认为此次识别失败。

经实验验证,当手机摄像头在身份证上方且平行无任何倾斜角度放置拍照时,该种方法的识别率可达100%。但因为人工操作的随意性比较大,所以下面考虑特殊的情况。

8 特殊情况考虑

工作人员在实际操作的过程中可能有各种操作状态,如图12所示,设A为身份证,B为智能手机,当手机B绕z轴旋转时获得的图片是水平倾斜的;当手机B绕y轴旋转时获得的图片是垂直倾斜的;其他操作获得的图片是既有水平倾斜又有垂直倾斜。

8.1 水平倾斜的情况

水平倾斜的图片如图13、14所示,本文采用文献[2]的方法先进行倾斜角的检测,具体的原理是建立两个共原点的笛卡尔坐标系x-y和x'-y',两坐标系的坐标轴之间的夹角为θ,旋转坐标系x'-y'并计算数字区域在y'轴上的投影方差Sθ:

其中,N为数字区域像素个数,y'θi为第i个像素在y'轴上的投影,为投影均值。若旋转角度θ等于倾斜角,方差Sθ取得最小值。因此只需对方差Sθ全局寻优,Sθ取最小值时对应的θ值,即为倾斜角度。然后采用仿射变换对图像进行矫正。矫正后的图片如图15所示,图16是对矫正后图片分割得到的结果。

8.2 垂直倾斜的情况

文献[3,4]提出的垂直倾斜校正方法适用于一副图像中所有字符整体朝一个方向垂直倾斜的情况。而本文中的垂直倾斜的图片如图17、18、19所示,可以看到左边几个字符向右倾斜,中间的字符没有倾斜,右边几个字符向左倾斜,所以不能对整幅图像测量垂直倾斜角度,必须对单个字符进行垂直倾斜确定。然而实际图片中单个字符随意性较大,测量单个字符的垂直倾斜角度不太容易,所以为了保证高识别率必须加强识别算法。

8.3 针对特殊情况对字符识别处理的进一步改进

因为有垂直倾斜的情况存在,所以如果只是采用7中提出的原始模板匹配方法进行识别难免会出现误判,如表1所示是图19中右边字符2的原始模板匹配的结果,从表1可以看到此时与模板7的匹配系数值最大,所以如果只采用模板匹配则识别出错。本文鉴借文献[5]的思想对识别算法做出如下改进:

经大量试验发现,容易识别错误的是字符是(1,7)、(2,7)和(6,8)。

8.3.1 对特殊字符“1”的处理

对比字符“1”和其他字符,发现字符1的高宽比要大于其他字符的高宽比,取阈值为0.4,本文的判断方法是比较相邻两个字符的高宽比,差值超过0.4则认为高宽比较大的为“1”;对于相邻字符为“1”的情况,若前一个字符已经判断为1,则第2个字符“1”与第1个字符“1”间的高宽比的差值小于0.4,则判断第二个字符也为“1”。所以在分割完成后就可以进行判断,不需要进行匹配识别。

8.3.2 对其他易误判字符的处理

对容易识别错的字符(2,7)和(6,8)在一次模板匹配的基础上,进行二次基于特征匹配的识别,图20给出每个字符的特征选择,每个特征的匹配系数为1,对于(2,7)判断特征区所含像素点的个数,取阈值为140,,若小于140二次判断与7匹配,否则与2匹配;对于(6,8)判断特征区的穿线特征,若有穿线跳变则判断与6匹配,否则与8匹配。第一次的模板匹配识别率还是很高的,所以不需要每次识别都启用二次识别,当且仅当第一次模板匹配中最大匹配系数值与第二大匹配系数值之差小于某个阈值时,有误判的可能,否则就完全相信模板匹配的结果。经试验测定这个阈值选为0.07。具体改进后的识别算法流程图见图21所示。

由表2可知,采用改进后的识别算法,2的最终匹配系数值最大,达到1.755,由此最终识别结果为2,可见改进后的识别算法是很有效的。本文中,对254幅采集的身份证号码图像进行测试,共有4572个字符,利用改进后的识别算法,正确识别的数字共4572个,识别率达到了100%,获得满意的识别效果。

9 结束语

本文实现的基于Android平台的二代身份证号码识别算法具有识别速度快、识别率高的特点。通过基于Android操作系统的智能手机,利用视频流捕捉图片,将其作为要处理的输入图像。经过图像预处理、身份证号码区域定位、字符分割等前期处理步骤,对图像进行字符识别。除此以外考虑了由人工操作的随意性而带来的特殊情况,并对此作出了相应的处理,提出了进一步改进的识别算法。本文的方法简单有效,在身份证号码识别中有着很好的实用价值,在其他数字识别系统中也有很好的参考价值。

参考文献

[1]路小波,张光华.基于二值图像的车牌精确定位方法[J].东南大学学报(自然科学版),2005.35(6).

[2]高元元.图像处理技术在自动水表校验装置中的应用研究[D].南京:南京航空航天大学通信与信息系统,2007.6

[3]吴一全,丁坚.投影点坐标方差最小化车牌垂直倾斜校正[J].应用科学学报,2009.27(2).

[4]王枚,王国宏.基于字符投影最小距离的车牌校正方法[J].计算机工程,2008.34(6).

[5]高菊,叶桦.一种有效的水表数字图像二次识别算法[J].东南大学学报(增刊).2013.8.

身份证号码与学籍号 篇2

1. 教师提出活动课题,将同学们分成若干课题小组,选好课题组长,给每个组员分好工,指导制订计划、分步实施.

2. 联系好学校网管员,在活动期间指导大家上网查资料.

3. 联系好派出所的户籍警,指导同学开展访谈活动.

4. 指导访谈教务处老师,了解学籍号的编写方法.

[设计思路]

1. 根据初一的知识水准和年龄特点,第一次开展课题学习时特别需要教师的有效指导,包括合作制订一个完整的课题实施计划,对每一次活动(如上网、访谈、设计等)都须具体指导到细节方面. 同时评价要体现主体多元、过程多元、方式多元.

2. 主要过程可分三个阶段:①调查与分析;②设计与创新;③交流与展示.

[活动过程]

1. 调查与分析(时间1周)

(1) 网络搜集组:从网络上搜集身份证的相关资料,如我国的身份证制度、历史及身份证的编码原则等.

(2) 实物收集组:从父母、亲戚朋友那里收集不同时期的身份证(复印件),记录收集到的身份证图案及号码设计.

(3) 访谈记录组:采访派出所户籍警,了解我国的身份证制度、本地区的身份证号码的识别等.

(4) 整理分析组:把各小组收集到的信息进行整理分析,从整体上了解身份证制度及编码方法,并编辑课题学习小报.

2. 设计与创新(时间1周)

(1) 根据第一阶段所获的信息,每个同学开展学籍号码设计活动,要求能反映出每个同学入学年份、班级、性别等信息,使全校每个同学都有自己相应的学籍号码.

(2) 写一份书面的设计说明,简要地概括自己设计的学籍号码的编制方法及优点.

3. 交流与展示(时间1课时)

(1) 身份证的历史与制度

(2) 申请、换领、补领身份证须知

(3) 第二代身份证特点

4. 延伸与拓展

主要是对尚未解决的问题或产生的新问题进行进一步的探究,让大家带着问题走向课外,走向生活,体现了综合实践活动问题的市场性.

课题学习是初中数学教学的一个重要环节,在开展“身份证号与学籍号”课题学习过程中,同学们大胆走出学校开展网络搜寻、调查、访问. 综合实践活动改变了同学们的学习方法,进而带来了巨大的学习动力,又由于我们选择的是大家感兴趣的课题,由此激发了学习的内驱力. 活动强调探究性学习、社会参与性学习、体验性学习和操作性学习等多种实践性学习方式,收到了较好的效果.

身份证号码与学籍号 篇3

1. 教师提出活动课题,将同学们分成若干课题小组,选好课题组长,给每个组员分好工,指导制订计划、分步实施.

2. 联系好学校网管员,在活动期间指导大家上网查资料.

3. 联系好派出所的户籍警,指导同学开展访谈活动.

4. 指导访谈教务处老师,了解学籍号的编写方法.

[设计思路]

1. 根据初一的知识水准和年龄特点,第一次开展课题学习时特别需要教师的有效指导,包括合作制订一个完整的课题实施计划,对每一次活动(如上网、访谈、设计等)都须具体指导到细节方面. 同时评价要体现主体多元、过程多元、方式多元.

2. 主要过程可分三个阶段:1调查与分析;2设计与创新;3交流与展示.

[活动过程]

1. 调查与分析(时间1周)

(1)网络搜集组:从网络上搜集身份证的相关资料,如我国的身份证制度、历史及身份证的编码原则等.

(2)实物收集组:从父母、亲戚朋友那里收集不同时期的身份证(复印件),记录收集到的身份证图案及号码设计.

(3)访谈记录组:采访派出所户籍警,了解我国的身份证制度、本地区的身份证号码的识别等.

(4)整理分析组:把各小组收集到的信息进行整理分析,从整体上了解身份证制度及编码方法,并编辑课题学习小报.

2. 设计与创新(时间1周)

(1)根据第一阶段所获的信息,每个同学开展学籍号码设计活动,要求能反映出每个同学入学年份、班级、性别等信息,使全校每个同学都有自己相应的学籍号码.

(2)写一份书面的设计说明,简要地概括自己设计的学籍号码的编制方法及优点.

3. 交流与展示(时间1课时)

(1)身份证的历史与制度

(2)申请、换领、补领身份证须知

(3)第二代身份证特点

4. 延伸与拓展

主要是对尚未解决的问题或产生的新问题进行进一步的探究,让大家带着问题走向课外,走向生活,体现了综合实践活动问题的市场性.

身份证号码解析 篇4

最后4位数字中的前两位表示当地派出所的编码;倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);最后一位数字是一个随机数,又称为校验码。

<<居民身份证条例>>规定:居住在中华人民共和国境内的年满16周岁的中国公民,应当依照规定,申请领取中华人民共和国公民身份证。

身份证是公民法定的身份证件,是国家为每个公民编制的唯一的、终生不变的身份代码。同学们,也许你还没有领到身份证,但是,你知道吗?当你父母到派出所为刚出生的你申报户口时,你的身份证号码就有了,它可以在你们家的户口簿上找到。

身份证号码由18位数字组成,你知道它们代表的信息吗?其中的第一、第二数字表示公民所在地的省份(或自治区、直辖市);第三、第四位数字表示公民所在地的市(或州);第五、第六位数字表示公民所在地的县(或县级市);接下来的8位数字表示公民的出生年、月、日;最后4位数字中的前两位表示当地派出所的编码;倒数第二位表示公民是男性还是女性(男性用单数,女性用双数);最后一位数字是一个随机数,又称为校验码。

如身份证号码***015表示江苏省(32)无锡市(03)崇安区(01)1975年11月9日出生的男性(1),当地的派出所编码(在盐城市范围内)是00。

再如身份证号码***212表示江苏省(32)盐城市(09)盐都区(28)1971年9月17日出生的男性(1),当地的派出所编码(在盐城市范围内)是22。

从上面可知,每一个中国公民都有一个身份证号码;反过来,我国的每一个身份证号码都可以找到唯一的一个中国公民。

例某人身份证号码是***871,此人今年(2005年)的周岁数是()

A 24 B 25 C 26 D 27

分析:解答本题的关键是确定身份证号码中哪4位数字表示出生年月(号码中的第7、8、9、10四位数字)。

解:由号码可知,此人出生于1978年,今年(2006年)28周岁,选 D。

数字传递信息,用数字表达特定意义在生活中使用非常简便、快捷,你能说出数字在其它方面的应用吗?

大陆的身份证为18位,老的身份证是15位。

关于身份证第18是怎么计算的,原理如下:根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字

校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码(身份证前六位)表示编码对象常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站http:///tjbz/index.htm

查询到最新的县及县以上的行政编码资料。)

生日期码(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。顺序码(身份证第十五位到十七位)为同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

校验码(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

第十八位数字的计算方法为:

1.将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

2.将这17位数字和系数相乘的结果相加。

3.用加出来和除以11,看余数是多少?

4余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。

5.通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。

例如:某男性的身份证号码是***01X。我们要看看这个身份证是不是合法的身份证。

首先:我们得出,前17位的乘积和是189

然后:用189除以11得出的结果是17 + 2/11,也就是说余数是2。

最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

身份证号码的秘密 篇5

关键词:管理信息系统,身份证号码,javascript

身份证号码是各类管理信息系统中应用最为广泛的一个字段, 它具有权威性、唯一性, 包含诸多有用信息, 是一个中国公民的重要标识。因此, 如果在管理信息系统中善用这个字段, 会给系统的信息应用带来很大便利。本文将围绕身份证号码的使用来做一个详细探讨。

一、身份证号码的组成分析

我国的身份证号有两类, 一类是15位的一代居民身份证, 另一类是18位的二代居民身份证。当前, 一般使用的都是18位身份证号码, 本文也将以18位身份证号码作为分析对象。

对照我国颁布的《国家强制标准GB11643-1999》中规定的身份证号码的结构和表示形式, 对于一个18位的身份证号码, 在其中的各个数字间, 存在着如下的规律:其前6位数字为公民在申请身份证号时所在地方代码, 如:320682即为江苏如皋;紧接其后的8位数字为公民的出生日期, 如:19821113即为1982年11月13日;接下来的第15-17位数字为顺序码, 即同一地址码所标识的区域范围内, 对同年、月、日出生的人员编定的顺序号, 第15和16位没有特殊含义。但需要注意的是, 其中第十七位数字中, 奇数代表着男性, 而偶数则代表着女性;身份证号码的第18位数字是对前17位数字进行校验的校验码, 以审核该号码是否符合编码规则。

根据以上对身份证号码中18位数字的分析, 可以得出身份证号码中蕴藏的一些基本信息, 也就是通过读取身份证号, 可以在管理信息系统中自动生成一些字段的结果, 而不用去重复统计。例如:通过前6位码, 一般可以获得身份证号所有者的出生地或籍贯地 (此方法对于最早领取身份证的一批人可能无效) ;通过其后的8位数字, 可以取得身份证号所有者的出生日期, 进而可以获得其年龄;通过读取第17位数字, 可以判定身份证号所有者的性别;而通过第18位数字可以校验当前身份证号是否符合编码规则, 从而在一定程度上减少身份证号录入系统时发生的错误。

二、身份证号应用实例

当前, 一般的管理信息系统都是以B/S模式进行运作的, 而Server端无论采用哪种技术进行开发, 开发者都可以加入JS脚本的一些代码, 以辅助系统运行。因此, 接下来本文将以Java Script语言为例, 对身份证号码进行读取分析等一系列操作、应用。

1.身份证号码所在地的获取

通过上述内容分析, 根据身份证号获取该号码所在地的信息, 需要经过以下几个步骤:

第一步, 获取身份证号前6位数字。

本文假设身份证号码显示于页面中的一个id为sfzh的div标签内 (当然也可以是从数据库中通过服务器语言读取, 再传递给js变量) , 那么, 首先要做的就是获取这个标签内的值, 通过JS代码可以表达如下, 即:

idcard=document.get Element By Id‘ (sfzh’) .inner Text;

通过以上操作, 页面中的身份证号将以文本形式被放置到变量idcard中。接下来, 则是将idcard中的前6位数字提取出来, 该操作可以通过javascript中的substr功能可以实现, 即:

place=idcard.substr (0, 6) ; //因为在数 组中 , 第一个元素的位置标识为0, 所以本例中要获取的第1个元素的标识实际为0, 且从该元素向后取6位

此时, 前6位数字以文本格式被存储到了变量place中。

第二步, 对比变量place中的值, 以获取地区名称。

建立一个place.js文件, 用于存放代码与地区对应的数组 (此文件可通过网络下载, 无需手动添加) , 格式如以下内容:

var areaArray=new Array () ; //定义一个存放地区与代码的数组

areaArray['320623']='江苏省南通市如东县'; //将地区与代码内容加入数组

area Array['320682']='江苏省南通市如皋市';

area Array['320601']='江苏省南通市';

……

再将变量place中的值传入到areaArray数组中进行比对, 如果有代码一致的, 即返回指定代码所对应的地区名, 如果没有一致的, 则返回空值。代码如下:

var nativeplace = area Array[place];

此时, 变量nativeplace中存放的就是代码所对应的地区汉字了。而需要做的, 就是将这个变量的值显示到网页中去。例如:将地区名显示到网页中一个id名为area的div标签中, 即:

document.get Element By Id ('area') .inner Text=nativeplace

2.出生日期的获取

出生日期的获取相对而言就比较简单了, 只需要获取第7至14位数字, 并将它们显示出来即可。

此时, 只要将变量birthday输出到网页就可以看到信息了, 但如果需要进一步格式化显示结果, 还需要通过javascript脚本, 对包含日期的变量birthday在显示时进行格式的设置, 在这里就不进行拓展了。

3.性别的获取

确定性别的代码是身份证号中的第17位数字, 因此首先要做的就是提取这第17位数字, 方法同上述步骤。

var sexcode=idcard.substr (16, 1) ;

此时, sexcode中就包括第17位数字了。接着, 对sexcode进行模2的运算, 如果得出的结果为0, 则性别为女;如果为1, 则性别为男。

此时, 再将sex显示到网页中即可。

4.身份证号的校验

身份证号码的第18位是对前17位的一个校验, 也就是说第18位数字是由前17位数字通过一定运算得来的。所以, 要完成这个校验过程就必须了解其校验规则。

通过查阅相关资料, 可以得出身份证号码的校验规则如下。

第一步, 对十七位数字本体码加权求和。

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

以上步骤是用身份证号码上的数字, 从第1位到第17位, 一一对应的与Wi数列中的数字相乘, 并将得到的结果相加。

第二步, 对第一步中求的和进行模运算。

Y = mod (S, 11)

这一步是用第1步求出的数字总和除以11, 并求它的余数。

第三步, 根据模的结果求出对应的校验码。

通过第2步求出的余数, 对应到下列的“Y”和校验码中来, 求出对应的数字。例如:如果求出的余数是10, 那么, 这个身份证对应的校验码则是数字2。具体的对应码见以下数列。

Y: 0 1 2 3 4 5 6 7 8 9 10

校验码: 1 0 X 9 8 7 6 5 4 3 2

通过以上分析, 对于身份证号码的校验规则已经明确了, 接下来, 就将以上规则转化为可执行的Javascript代码, 具体如下:

首先, 定义一个数组weighting, 其中, 存储用来进行加权运算处理的相应的数值:

var weighting=new Array ("7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2") ;

再定义一个存储校验码的数组check:

var check=new Array ("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2") ;

接下来, 设计校验身份证号的主程序:

function checkId (id) {

var c_id=id.substr (0, 17) ; //取从函数 中传来的身份证号位, 以文本格式存放到变量c_id中

var c_num=id.substr (17) ; //取出身份 证号的第18位, 即校验码, 存放到变量c_num中

var w_sum=0; //初始化加权值的和

break; //逐位取出数字, 并检测是否为数字, 如果不是就退出

return false; //对加权值的总和进行模运算, 并将得到的值与身份证号第18位进行对比, 如果相同, 则返回true, 不同则返回false

通过以上步骤, 就可以从编码规则的角度来判定身份证号码是否符合规则了。

三、应用小结

本文以Javascript语言为例, 具体论述并实现了身份证号在管理信息系统中的应用及其是否符合编码规范的验证方法, 充分发挥了身份证号码编码所代表的含义及作用, 简化信息处理的结构, 提升了信息处理的效率, 提高了信息处理的精准度。本文所述思路在Excel、Access等工具软件及其他编程语言、数据库软件中也同样适用。

参考文献

[1]李剑铭.身份证号码在Excel函数中的作用[J].信息科技, 2012, (35) :121.

身份证号码的秘密 篇6

在一次全国性考试报名中,发现有一位考生在填写身份证号时少填了一位,当时又无法和该考生取得联系,而报名数据必须立即上报,作者试图根据我国身份证号码的编码规则和校验码生成方法,尝试能否找出少填的这一位的值。在查阅了18位身份证标准之后,对照这个标准,发现该考生漏填的这一位数字恰恰是校验码,于是依据18位身份证标准校验码的规则,通过Excel生成了该考生的身份证号码校验码,顺利完成了该考生的报名。下文简要介绍了18位身份证标准、校验码的规则,探讨了用Excel生成验证码的方法。

2 18位身份证标准

18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定,具体内容包括:范围、编码对偶、号码的结构和表示形式等内容。在此只对号码的结构和表示形式作介绍,重点说明校验位的规则。

2.1身份证号码的结构

GB11643-1999《公民身份号码》中规定:公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其中:地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行;出生日期码表示编码对象出生的年、月、日,按GB/T7408的规定执行;顺序码表示在同一地址码所标识的区域范围内,对相同年月日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。[1]

2.2身份证号码校验码的规则

在GB11643-1999《公民身份号码》中规定:1)对公民身份号码中的前十七位数字(Ai,其中i的值0~16)都对应一个加权因子(Wi),并规定了本体码加权求和公式为S=Sum(Ai*Wi),i=0,...,16(对前17位数字进行加权示各),其中各位的权如表1所示;2)对求和结果S对11计算模,Y=mod(S,11);3)通过求得的模(Y)得到对应的校验码,其中模(Y)和校验码的对应关系如表2所示。[1]

3 校验码的形成

依据GB11643-1999《公民身份号码》中身份证号码校验码的规则,在Excel中按如下步骤生成校验码:

步骤1:按如图1所示建立工作表;

步骤2:求出加权值(B4:R4),公式为:B4=B2*B3;

步骤3:求B4:R4的和除以11取模,结果放入S4中,公式为:S4=mod(sum(B4:R4),11);

步骤4:据S4求出校验码,结果放入S2中,公式为:S2=INDEX(B6:J6,S4+1)。

经过以上步骤后,单元格S2中就为前17位本体码(B2:R2,本例中的数据为的举例,实际计算时请输入验证校验码的身份证号码前17位)对应的校验码。

4 结束语

本文依据GB11643-1999《公民身份号码》的标准,由Excel来生成身份证校验码。当然也可通过其他程序设计语言来实现,并可在输入身份证号码时进行检验所输入的号码是否正确。

摘要:该文首先介绍GB11643-1999《公民身份号码》标准中号码的结构和表示形式,并重点说明校验码的规则,最后介绍如何通过Excel生成身份证号码的校验码。

关键词:Excel,身份证号码,校验码

参考文献

上一篇:汽车车轮论文下一篇:医学影像人才培养