前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|趣解身份证号码的奥秘

Python|趣解身份证号码的奥秘

作者头像
算法与编程之美
发布2020-09-08 17:14:12
1.3K0
发布2020-09-08 17:14:12
举报

问题描述

作为一个公民,每个人都有一张独一无二的身份证,有独一无二的身份证号码。在这里面几乎储存了我们所有的行踪与信息,所以有很多不法分子能够仅通过身份证号码进行一些犯罪活动。然而在生活中其实很容易泄露这些信息,比如车票等等,虽然遮住了4位数字,但这真的安全吗?

解决方案

通过简单的查询,我们不难知道,其实身份证号码虽然独一无二,但其生成的规律确是固定的,仅仅通过公式便能确定一个身份证号码是否正确,反之也可以通过一个确定正确但不完整的身份证号码来反推完整信息。

身份证的组成部分相信大家都明白,其最重要的是最后一位校验码,而校验码的计算其实非常简单:

前17位数字每一个对应了一个系数,分别是7. 9 .10 .5. 8. 4. 2. 1. 6. 3. 7. 9. 10. 5. 8. 4. 2,将每一位数字与系数相乘得到的数加在一起除以11的余数一定在0-10以内。然后0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 10这11个数字。其分别对应的最后一位身份证的号码为1 .0. X. 9. 8. 7. 6. 5. 4. 3. 2.,这样就得到自己的校验码,读者当然可以自己试试自己的身份证号码。

虽然我们知道,就算硬算,也不过366种尝试就能得到结果,但学习语言就是为了简化,所以笔者自己写了一段判断身份证是否正确和大致推算身份证号码的代码,读者可以自己试试是否有效。

Python代码:判断身份证号是否真实

def ID_Card_judgment(ID_num): list1 = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] sums = 0 for i in range(len(list1)): new_num = int(ID_num[i]) * list1[i] sums += new_num check_code = [1,0,"X",9,8,7,6,5,4,3,2] num = sums % 11 if str(check_code[num]) == ID_num[-1]: return "True" else: return "False"

大致推断完整身份证号码:

def ID_Card_calculation(ID_num): if ID_num[-1] == "X": new_ID_num = ID_num[:-1]+"10" else: new_ID_num = ID_num a = new_ID_num.split("*") new_ID_card = "".join(a) front_code = [7,9,10,5,8,4,2,1,6,3,8,4,2] #除生日四位数其他数的参数 sums = 0 for i in range(len(front_code)): #len(new_ID_card) = 18-4-1 =13 nums = int(new_ID_card[i]) * front_code[i] sums += nums # print(sums) 除了生日四位数,其他数与对应参数乘积之和 #7,9,10,5 生日四位数的参数 duiying = [1,0,10,9,8,7,6,5,4,3,2] times = 0 for a in range(0,2): for b in range(0,10): for c in range(0,4): for d in range(0,10): if (sums + (a*7 + b*9 + c*10 + d*5)) % 11 == duiying[int(new_ID_num[17:])]: string = str(a)+str(b)+str(c)+str(d) if 0 < int(string[0:2]) <= 12 and 0 < int(string[2:4]) <= 31: times += 1 ID_Card_num = ID_num[0:10] + string + ID_num[14:18] print(ID_Card_num) print("共有%d种情况。"%times)

这个代码要求输入的是生日为****的一串数字,也符合常见的隐藏身份证号码的规则。虽然不能精确的推断,但是所得的结果仅有二三十种,再通过现有的网络上一些平台,加上姓名和星座等等其他一些信息,轻松便能得到你的信息。

结语

身份证上储存了太多的私人信息,大家一定要妥善保管。还有废弃的车票等其他看似隐藏了能够保护我们信息的数字,但都有可能是最后的“罪魁祸首“。虽然其他可能不是隐藏的这四位数字,但通过规律,也是能够得到的。所以笔者提醒大家,在网络上一定要将自己身份证号打上马赛克,不给不法分子有可乘之机。

END

主 编 | 王楠岚

责 编 | 李和龙

where2go 团队


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档