基于 Python 的身份证号码自动生成程序
需求细化:
1.身份证必须能够通过身份证校验程序。
2.通过查询,发现身份证号码是有国家标准的,标准号为 GB 11643-1999 可以从百度下载到这个文档
下载:GB11643-1999sfz(jb51.net).rar
现行身份证号为18位,分别为6位地址码,8位生日,3位顺序码,一位校验码。具体例子可见下图。
前六位也是国家标准,GB2260-2007。吐槽一下,国标竟然没有一个网站供全面检索和免费下载。。。还好国家统计局有这些公开数据。可以从统计数据-》统计标准-》行政区划代码页面内找到最新数据:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html (这个网页上的数据可能会旧)
出生年月日是8位
顺序码是3位,男生末尾为基数,女生末尾为偶数。
最后一位是校验码。校验算法其实后面有很多数学道理,这里给出最简单的公式:
前17位数字每一位有一个权重值
将第i位上的权重值记作Wi,Wi的值为 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
将身份证第i位的数字记作Ai
则使用下列公式算出一个数
S= Sum(Ai*Wi) mod 11 ------------- Sum(Ai*Wi) 取11的模。
这样S的取值如下表:
对每一个S做一个映射 Y,这样就有如下的表
S:0 1 2 3 4 5 6 7 8 9 10
Y:1 0 X 9 8 7 6 5 4 3 2
Y就是最终的校验码。
原型实现过程:
1.获取区域规划码的list,并读入一个dictionary的list中。dictionary结构如下:
{"state":河北省,"city":沧州市,"district":运河区,"code":130903}
丑陋的原型如下:
def getdistrictcode(): with open('districtcode') as file: data = file.read() districtlist = data.split('\n') global codelist codelist = [] for node in districtlist: #print node if node[10:11] != ' ': state = node[10:].strip() if node[10:11]==' 'and node[12:13]!=' ': city = node[12:].strip() if node[10:11] == ' 'and node[12:13]==' ': district = node[14:].strip() code = node[0:6] codelist.append({"state":state,"city":city,"district":district,"code":code})
上部你得到了一个codelist,里边有所有的区号了。
下面是生成身份证号的原型,基本上是随机生成
def gennerator(): id = codelist[random.randint(0,len(codelist))]['code'] #地区项 id = id + str(random.randint(1930,2013)) #年份项 da = date.today()+timedelta(days=random.randint(1,366)) #月份和日期项 id = id + da.strftime('%m%d') id = id+ str(random.randint(100,300))#,顺序号简单处理 i = 0 count = 0 weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] #权重项 checkcode ={'0':'1','1':'0','2':'X','3':'9','4':'8','5':'7','6':'6','7':'5','8':'5','9':'3','10':'2'} #校验码映射 for i in range(0,len(id)): count = count +int(id[i])*weight[i] id = id + checkcode[str(count%11)] #算出校验码 return id
原型用到了python的两个标准库
from datetime import date
from datetime import timedelta
这样就能初步满足需要了,后续可以根据要就对工具进行细化。
btw,其实,正在开发一个测试数据生成的工具集,近期争取开源。有任何具体需求可以提给我。有想一起做的同学也大大的欢迎:)
上一篇: 身份证最后一位校验码的算法实现
推荐阅读
-
基于 Python 的身份证号码自动生成程序
-
使用 Python 根据指定的出生日期自动生成测试 ID 号
-
生成身份证号码的 python
-
在 excel 中获取身份证号码,自动生成补充资料的出生日期以及生成年龄的方法
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
基于SSM的面向过程考核的高校课程实验系统-00941(免费领取源码+数据库) 可做计算机毕业设计 JAVA、PHP、爬虫、APP、小程序、C#、C++、python、数据可视化、大数据、全套文案等
-
OpenAI] Python:基于健身房赛车的自动驾驶项目 (1) | 前期知识介绍 | 项目环境准备 | 逐步动手实施
-
miniTry:网络搜索的 Python 实现(全自动 + 程序操作)
-
基于OSG的Python 3D程序开发(五) ------ 沿路径运动
-
基于 pywinauto 的 PC Python 自动化 python 操作 微软自动化