关于身份证号码校验位的思考

每个合法的中华人民共和国公民都拥有自己的身份证和身份证号。最初的身份证号似乎是15位的(笔者父母的身份证号就是15位的),后来在我出生的那一年根据相关的政策改成了18位。就是这短短的18位数字里,也有很多有趣的意义。

1999年

根据《国务院关于实行公民身份号码制度的决定》,自1999年10月1日起在全国建立和实行公民身份号码制度。

一、公民身份号码按照GB11643-1999《公民身份号码》国家标准编制,由18位数字组成:前6位为行政区划代码,第7至14位为出生日期码,第15至17位为顺序码,第18位为校验码。

二、公民身份号码是国家为每个公民从出生之日起编定的唯一的、终身不变的身份代码,将在我国公民办理涉及政治、经济、社会生活等权益事务方面广泛使用。公安部负责公民身份号码的编制和组织实施工作。

三、各省、自治区、直辖市人民政府和国务院有关部门对公民身份号码的编制和推广应用工作要给予必要的支持。各级人民政府要切实加强领导,提供工作保障,搞好宣传教育,精心组织实施。

​ ——摘自百度知道

其实最早在小学的时候就接触身份证号了,记得当时的数学课上,老师有说过身份证号码的最后一位和倒数第二位的意义:从右往左数第二位代表性别,奇数是男性,偶数是女性;从右往左数第一位是校验码,是根据前面所有位数的数字经过某种算法得到的。如果经过该种算法得到的是一个小于10的整数,则直接用该整数拼接生成18位身份证号码,反之则最后一位以X替代。这是我在重新学习身份证号码校验位之前对身份证号码的所有认识。

由于最近几年个人隐私问题重新被大众提到一个新的高度,我也开始思考身份证号码的安全性问题。

身份证例子.jpg

在很多大型网站向客户提供服务的时候,需要让客户提供自己的身份信息以确保服务的安全进行,所以进行身份证校验就成为了一种很重要的手段。当然校验方式有很多种,最稳妥的是向公安机关查询,但是并不是所有企业都可以向公安部申请到身份信息校验接口的。
所以,我们可以采用校验位的方式进行大体的校验,可以在很大程度上限制随便乱敲的客户。

身份证18位分别是这样的意思:
6位表示地域+8位生日+3位数字顺序码+1位校验码

6位地域前2位表示省,中间两位是市,后两位是县。

其中顺序码末位为奇数,是男性,偶数是女性。

我们可以简单的使用1位校验码进行判断,当然也可以再对生日、地域进行校验,此次我只是解决校验位的问题。

校验方式:
1.加权求和

将前17位与各自对应的系数相乘后进行求和,系数是提前设定好的,每位有自己的系数。
每位系数如下:

1
[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]

**2.**将加和除以11,取余数。
**3.**按照余数数值,查表得最后一位。
对应表如下:

1
['1','0','X','9','8','7','6','5','4','3','2']

**例如:**余数为0,则最后一位为1,余数为2,则最后一位为X。

例如你的身份证号前17位是12345678901234567
按照上述计算方法,有如下
1*7+2*9+3*10+4*5+6*8+7*4+8*2+9*1…
然后除以11,再取余,再查表。

这里笔者提供了使用Python代码,方便进行快捷校验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
idnum=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
younum=''
print('请输入前17位数字')
print('12312320190606000')
younum=str(input(''))

num=0
i=0
while i<17:
num=num+int(younum[i])*idnum[i]
i=i+1

end=num%11
endnum=['1','0','X','9','8','7','6','5','4','3','2']
print('最后一位是:'+str(endnum[end]))
print(str(younum[0:17])+str(endnum[end]))
f=open('身份证校验位.txt','w')
f.write('最后一位是:'+str(endnum[end])+'\n'+str(younum[0:17])+str(endnum[end]))
f.close()

运行该代码并成功执行后悔在代码文件所在目录生成一个文本文档,记录当前的身份证号码以供核验。

其实,事后再总结下,身份证号码前6位表示地域,再加上8位生日,再加上2位数字顺序码,再加上1位性别码(单为男,双为女和1位校验码(如果只是使用穷举法进行验证,最多也只需要输入11次就可以得到正确真是的身份证号码) 。

所以在自己的日常生活中,不仅需要保管好自己的身份证件,保管好自己的身份证号码也显得格外重要。

本文标题:关于身份证号码校验位的思考

文章作者:zzzain46

发布时间:2019年11月24日 - 15:11

最后更新:2019年11月26日 - 11:11

原始链接:https://www.52debug.cn/posts/c6fbd9f0.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

如果你觉得我的文章对你有用,请随意打赏!
0%