浔川身份证号码查询——浔川python科技社
Python获取身份证信息
公民身份号码是每个公民唯一的、终身不变的身份代码,由公安机关按照公民身份号码国家标准编制。每一个居民只能拥有一个唯一的身份证,它是用于证明持有人身份的一种法定证件。
身份证包含了个人的一些重要信息,比如:
- 前6位数字是地址码,表示发证地的行政区代码。
- 接下来的8位数字是出生日期码,表示出生年月日。
- 之后的3位数字是顺序码,表示在同一地址码范围内出生的人员顺序号。
- 最后一位数字是校验码,用于检验身份证的正确性。
除了这些基本的数字信息,身份证上还可能包含其他相关信息,如民族、性别等。这些信息可以通过相应的规则和算法进行解读和验证。
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.messagebox
import pickle
import random# 窗口
window = tk.Tk()
window.title('欢迎进入python')
window.geometry('450x200')
# 画布放置图片
# canvas=tk.Canvas(window,height=300,width=500)
# imagefile=tk.PhotoImage(file='qm.png')
# image=canvas.create_image(0,0,anchor='nw',image=imagefile)
# canvas.pack(side='top')
# 标签 用户名密码
Verification_Code = random.randint(1000, 9999)#设置一个随机的四位数
Verification_Code = str(Verification_Code)#把类型转换为str型
print(type(Verification_Code))
tk.Label(window, text='用户名:').place(x=100, y=30)
tk.Label(window, text='密码:').place(x=100, y=70)
tk.Label(window, text='验证码').place(x=100, y=110)
tk.Label(window, text=Verification_Code).place(x=320, y=110)
# 用户名输入框
var_usr_name = tk.StringVar()
entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
entry_usr_name.place(x=160, y=30)
# 密码输入框
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
entry_usr_pwd.place(x=160, y=70)
#验证码输入框
var_usr_yzm = tk.StringVar()
entry_usr_yzm = tk.Entry(window, textvariable=var_usr_yzm)
entry_usr_yzm.place(x=160, y=110)# 登录函数
def usr_log_in():# 输入框获取用户名密码usr_name = var_usr_name.get()usr_pwd = var_usr_pwd.get()usr_yzm = var_usr_yzm.get()#测试类型print(type(usr_yzm),type(Verification_Code))# 从本地字典获取用户信息,如果没有则新建本地数据库try:with open('usr_info.pickle', 'rb') as usr_file:usrs_info = pickle.load(usr_file)except FileNotFoundError:with open('usr_info.pickle', 'wb') as usr_file:usrs_info = {'admin': 'admin'}pickle.dump(usrs_info, usr_file)# 判断验证码是否正确用户名和密码是否匹配if usr_yzm == Verification_Code:if usr_name in usrs_info:if usr_pwd == usrs_info[usr_name]:tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)else:tk.messagebox.showerror(message='密码错误')# 用户名密码不能为空elif usr_name == '' or usr_pwd == '':tk.messagebox.showerror(message='用户名或密码为空')# 不在数据库中弹出是否注册的框else:is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')if is_signup:usr_sign_up()elif usr_yzm == '':tk.messagebox.showerror(message='验证码不能为空')else:tk.messagebox.showerror(message='验证码有误!')# 注册函数
def usr_sign_up():# 确认注册时的相应函数def signtowcg():# 获取输入框内的内容nn = new_name.get()np = new_pwd.get()npf = new_pwd_confirm.get()# 本地加载已有用户信息,如果没有则已有用户信息为空try:with open('usr_info.pickle', 'rb') as usr_file:exist_usr_info = pickle.load(usr_file)except FileNotFoundError:exist_usr_info = {}# 检查用户名存在、密码为空、密码前后不一致if nn in exist_usr_info:tk.messagebox.showerror('错误', '用户名已存在')elif np == '' or nn == '':tk.messagebox.showerror('错误', '用户名或密码为空')elif np != npf:tk.messagebox.showerror('错误', '密码前后不一致')# 注册信息没有问题则将用户名密码写入数据库else:exist_usr_info[nn] = npwith open('usr_info.pickle', 'wb') as usr_file:pickle.dump(exist_usr_info, usr_file)tk.messagebox.showinfo('欢迎', '注册成功')# 注册成功关闭注册框window_sign_up.destroy()# 新建注册界面window_sign_up = tk.Toplevel(window)window_sign_up.geometry('350x200')window_sign_up.title('注册')# 用户名变量及标签、输入框new_name = tk.StringVar()tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)# 密码变量及标签、输入框new_pwd = tk.StringVar()tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)# 重复密码变量及标签、输入框new_pwd_confirm = tk.StringVar()tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)# 确认注册按钮及位置bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',command=signtowcg)bt_confirm_sign_up.place(x=150, y=130)# 退出的函数
def usr_sign_quit():window.destroy()# 登录 注册按钮
bt_login = tk.Button(window, text='登录', command=usr_log_in)
bt_login.place(x=140, y=150)
bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
bt_logup.place(x=210, y=150)
bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
bt_logquit.place(x=280, y=150)
# 主循环
window.mainloop()import tkinter as tk # 使用Tkinter前需要先导入
import re# 第1步,实例化object,建立窗口window
window = tk.Tk()# 第2步,给窗口的可视化起名字
window.title('身份证号码查询')# 第3步,设定窗口的大小(长 * 宽)
window.geometry('700x500')# 第4步,在图形界面上设定标签
l = tk.Label(window, text='身份证号验证', font=('宋体', 30), width=40, height=2)
l1 = tk.Label(window, text='身份证号:', font=('Arial', 16), width=40, height=2)# 第5步,放置标签
l.place(x=-80, y=0, anchor='nw')
l1.place(x=-100, y=80, anchor='nw')# 第4步,在图形界面上设定输入框控件entry框并放置
e = tk.Entry(window, show=None, font=('Arial', 20),)
e.place(x=200, y=90, anchor='nw')# 第5步,定义两个触发事件时的函数check和delete
def check(): # 按钮'检查'对应的函数t.delete(1.0, 'end')IDcard = e.get()if len(IDcard) != 18:var = '号码:' + IDcard + "\n身份证号码位数不对!\n错误的身份证号码.\n请重新输入!\n"else:IDcard_add = IDcard[0:6] # 身份证前6位,对应归属地IDcard_birth = IDcard[6:14] # 身份证中间8位,对应出生日期IDcard_sex = IDcard[14:17] # 身份证15,,16,17位,对应性别area = {"11": "北京", "12": "天津", "13": "河北", "14": "山西", "15": "内蒙古", "21": "辽宁","22": "吉林", "23": "黑龙江", "31": "上海", "32": "江苏", "33": "浙江", "34": "安徽","35": "福建", "36": "江西", "37": "山东", "41": "河南", "42": "湖北","43": "湖南","44": "广东", "45": "广西", "46": "海南", "50": "重庆", "51": "四川", "52": "贵州","53": "云南", "54": "西藏", "61": "陕西", "62": "甘肃", "63": "青海", "64": "宁夏","65": "新疆", "71": "台湾", "81": "香港", "82": "澳门", "91": "国外"}# 地区校验if IDcard[0:2] not in area.keys():var = '号码:' + IDcard + '\n身份证地区非法!\n错误的身份证号码\n'else:year = IDcard_birth[0:4] # 出生年份month = IDcard_birth[4:6] # 出生月份day = IDcard_birth[6:8] # 出生日# 出生日期的合法性检查# 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]# |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))# 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]# |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))if (int(year) % 4 == 0 or (int(year) % 100 == 0 and int(year) % 4 == 0)):ereg = re.compile('[1-9][0-9]{5}((19[0-9]{2})|(20[0-1][0-8]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]''|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))''[0-9]{3}[0-9Xx]$') # //闰年出生日期的合法性正则表达式else:ereg = re.compile('[1-9][0-9]{5}((19[0-9]{2})|(20[0-1][0-8]))((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]''|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])'')[0-9]{3}[0-9Xx]$') # //平年出生日期的合法性正则表达式# //测试出生日期的合法性if (re.match(ereg, IDcard)):IDcard_check = IDcard[17] # 身份证最后一位W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 逐位权数IDcard_CHECK = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] # 身份证检验位IDcard_sum = 0 # 定义累加和for i in range(0, 17):IDcard_sum = IDcard_sum + int(IDcard[i]) * W[i] # 逐位加权求和IDcard_Check = IDcard_sum % 11 # 取余数if IDcard_check != IDcard_CHECK[IDcard_Check]: # 和检验位对比var = '号码:' + IDcard + '\n身份证号码校验错误!\n错误的身份证号码\n'else:if int(IDcard_sex) % 2 == 0:var = "正确的身份证号码! \n" + '号码:' + IDcard + '\n地区:' + area[IDcard[0: 2]] + \'\n生日:' + year + '年' + month + '月' + day + '日' + "\n 性别:女\n"else:var = "正确的身份证号码! \n" + '号码:' + IDcard + '\n地区:' + area[IDcard[0: 2]] + \"\n生日: " + year + '年' + month + '月' + day + '日' + "\n性别:男 \n"else:var = '号码:' + IDcard + '\n身份证号码出生日期超出范围或含有非法字符!\n错误的身份证号码\n't.insert('insert', var) # 显示输出e.delete(0, 'end')# 第6步,创建并放置两个按钮分别触发两种情况
b1 = tk.Button(window, text='检查', width=10, height=2, command = check)
b1.place(x=550, y=80, anchor='nw')# 第7步,创建并放置一个多行文本框text用以显示
t = tk.Text(window, font=('宋体', 20), width=38, height=8)
t.place(x=100, y=210, anchor='nw')# 第8步,主窗口循环显示
window.mainloop()
运行结果展示:
1 登录 “浔川身份证号码查询”

2 查询身份证

相关文章:
浔川身份证号码查询——浔川python科技社
Python获取身份证信息 公民身份号码是每个公民唯一的、终身不变的身份代码,由公安机关按照公民身份号码国家标准编制。每一个居民只能拥有一个唯一的身份证,它是用于证明持有人身份的一种法定证件。 身份证包含了个人的一些重要信息,比如&am…...
C++的标准容器及其应用
C的标准容器及其应用 数组(array)数组的特征应用实列 前向列表(forward_list)前向列表的特征应用实列 列表(list)列表的特征应用实列 有序映射(map)有序映射的特征应用实列 队列&…...
linux如何部署前端项目和安装nginx
要在Linux上部署前端项目并安装Nginx,你可以按照以下步骤操作: 安装Nginx: sudo apt update sudo apt install nginx 启动Nginx服务: sudo systemctl start nginx 确保Nginx服务开机自启: sudo systemctl enable nginx 部署前端项目,假设前…...
Coolify:24.2K 星星!使用全新、开源免费且自托管的替代方案,部署应用程序的最佳工具(停止使用 Vercel)
✨点击这里✨:🚀原文链接:(更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号!) Coolify:24.2K 星星!使用全新、开源免费且自托管的替代方案,部…...
Dubbo入门
Dubbo,听名字好像有点高大上,但实际上它就是个让不同的计算机程序之间能够互相交流的工具,专业点说,它是一个分布式服务框架。想象一下,你有好几个小团队,每个团队负责开发一个部分,最后这些部分…...
从零学习es8
配置 编辑 elasticsearch.yml xpack.security.enabled: true 单节点 discovery.type: single-node设置账号: elasticsearch-reset-password -u elastic 如果要将密码设置为特定值,请使用交互式 (-i) 参数运行该命令。 elasticsearch-reset-password -i…...
String.compareTo()方法详解
Java 中的 String.compareTo() 方法用于按字典顺序比较两个字符串。这个方法实现了 Comparable 接口,返回一个整数,表示字符串的相对顺序。 方法签名 public int compareTo(String anotherString)返回值 一个负整数:如果当前字符串在字典顺…...
Nintex流程平台引入生成式人工智能,实现自动化革新
工作流自动化提供商Nintex宣布在其Nintex流程平台上推出一系列新的人工智能驱动改进。这些增强显著减少了文档化、管理和自动化业务流程所需的时间。这些新特性为Nintex流程平台不断扩展的人工智能能力增添了新的亮点。 Nintex首席产品官Niranjan Vijayaragavan表示:…...
永远不要做房间里“最聪明的人”(早懂早受益)
听好了,茶客,我要向你解释一些事情。 你的工作和职责是让客户认为他是房间里最聪明的人。 如果你完成了这项任务之后,还有多余的精力,应该用它来让你的高级合伙人显得像是房间里第二聪明的人。 只有履行了这两项义务之后ÿ…...
Leetcode 3177. Find the Maximum Length of a Good Subsequence II
Leetcode 3177. Find the Maximum Length of a Good Subsequence II 1. 解题思路2. 代码实现 题目链接:3177. Find the Maximum Length of a Good Subsequence II 1. 解题思路 这一题我一开始的思路是直接使用暴力的动态规划的方式进行实现,结果遇到了…...
程序员做电子书产品变现的复盘(2)
赚钱有多种,简单分为两类。 (1)手停口停型,这种工作在你积极从事时可能每天能带来数千甚至上万的收入,但一旦停止工作,收入就会大幅下降甚至归零,例如我们的日常工资。 (2…...
Java中的JVM是什么?如何调优JVM的性能?
Java中的JVM(Java Virtual Machine)是一个虚构出来的计算机,是一个规范,它在运行Java程序时扮演着核心角色。调优JVM的性能可以通过内存管理、垃圾回收、编译器优化等方法来提升Java应用程序的性能和稳定性。 Java中的JVM&#x…...
大型医院手术麻醉系统源码,前端采用Vue,Ant-Design开发,稳定成熟
医院手麻系统源码,手术麻醉信息系统,C#源码 医院手术麻醉信息系统包含了手术申请、排班、术前、术中、术后,直至出院的全过程。通过与相关医疗设备连接,与大屏幕显示公告相连接,实现了手术麻醉临床应用数据链全打通。…...
Linux安装Docker | 使用国内镜像
环境 CentOS7 先确认能够上网 curl www.baidu.com返回该输出说明网络OK 步骤一:安装gcc 和 gcc-c yum -y install gccyum -y install gcc-c步骤二:安装Docker仓库 yum install -y yum-utils接下来配置yum的国内镜像 yum-config-manager --add-re…...
redis易懂快速安装(linux)2024
1.首先打开虚拟机系统 2.打开终端,输入su - 输入管理员密码,进入管理员用户 3.输入inconfig查看ip地址 4.打开final shell 连接虚拟机,输入ip和root用户以及密码 5.连接成功 6.输入 cd /usr/local/src/ 进入要安装的文件夹 6.点击上传按钮…...
关于数据库存储【\】转义字符反斜杠丢失的问题
背景 开始的时候,发现一个很奇怪的现象 富文本编辑器,前端存储带有"的内容,回显的时候解析就会出问题 后来发现,其实是只要是需要带有\进行转义的内容就会有问题 排查 从前端提交数据,后端获取数据ÿ…...
Unity3D 如何做好版本控制
目前项目这样版本控制: 1、在unity里,应该只对Assets(包含,meta)和ProjectSettings这两个文件夹做版本控制,其他的文件都是unity或工具生成出来的。 2、设置project setting ->editor setting-> Asset seriali…...
移动端消息中心,你未必会设计,发一些示例出来看看。
APP消息中心是一个用于管理和展示用户收到的各种消息和通知的功能模块。它在APP中的作用是提供一个集中管理和查看消息的界面,让用户能够方便地查看和处理各种消息。 以下是设计APP消息中心的一些建议: 1. 消息分类: 将消息按照不同的类型进…...
Non-zero exit code pycharm
目录 windows 设置conda代理: linux Conda 使用代理 4. 修改 Conda SSL 验证 pycharm 报错 exceted command pip 设置代理 Non-zero exit code 科学上网后,pip安装时警告报错 WARNING: Retrying (Retry(total0, connectNone, readNone, redirectNo…...
西门子学习笔记12 - BYTE-REAL互相转化
这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
JDK 17 序列化是怎么回事
如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...
麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...
Appium下载安装配置保姆教程(图文详解)
目录 一、Appium软件介绍 1.特点 2.工作原理 3.应用场景 二、环境准备 安装 Node.js 安装 Appium 安装 JDK 安装 Android SDK 安装Python及依赖包 三、安装教程 1.Node.js安装 1.1.下载Node 1.2.安装程序 1.3.配置npm仓储和缓存 1.4. 配置环境 1.5.测试Node.j…...
