浔川身份证号码查询——浔川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 查询身份证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年哪4种编程语言最值得学习?看JetBrains报告

六个月前,编程工具界的大牛JetBrains发布了他们的全球开发者年度报告。 小吾从这份报告中挑出了关于全球程序员过去一年使用编程语言的情况和未来的采纳趋势,总结出2024年最值得学习的四种编程语言。一起来看看吧。 JetBrains在2023年中开始,就向全球的编程达人们发出了问卷…

Vue32-挂载流程

一、init阶段 生命周期本质是函数。 1-1、beforeCreate函数 注意: 此时vue没有_data,即:data中的数据没有收到。 1-2、create函数 二、生成虚拟DOM阶段 注意: 因为没有template选项,所以,整个div root都…

论文学习day01

1.自我反思的检索增强生成(SELF-RAG) 1.文章出处: Chan, C., Xu, C., Yuan, R., Luo, H., Xue, W., Guo, Y., & Fu, J. (2024). RQ-RAG: Learning to Refine Queries for Retrieval Augmented Generation. ArXiv, abs/2404.00610. 2.摘…

CCAA质量管理【学习笔记】​ 备考知识点笔记(一)

第一部分 质量管理体系相关标准 《质量管理体系基础考试大纲》中规定的考试内容: 3.1质量管理体系标准 a) 了解 ISO 9000 系列标准发展概况; b) 理 解 GB/T19000 标准中涉及的基本概念和质量管理原则; c) 理 解GB/T19000 标准中的部分…

论文阅读笔记:Instance-Aware Dynamic Neural Network Quantization

论文阅读笔记:Instance-Aware Dynamic Neural Network Quantization 1 背景2 创新点3 方法4 模块4.1 网络量化4.2 动态量化4.3 用于动态量化的位控制器4.4 优化 5 效果 论文:https://openaccess.thecvf.com/content/CVPR2022/papers/Liu_Instance-Aware_…

CDN绕过技术

DNS域名信息收集 简介 Dns域名信息的手机,需要收集域名对应IP,域名注册人,DNS记录,子域名等一系列与域名相关的信息。 Cdn技术简介 Cdn是一个内容分发网络,类似于dns服务器一样,用户发送数据直接发送到…

联想电脑电池只能充到80%,就不在充电了,猛一看以为坏了,只是设置了养护模式。

现在电池管理模式有三种: 1)常规 2)养护 3)快充 好久没有用联想的电脑了,猛一看,咱充到了80%不充了,难道电池是坏的?我们要如何设置才可以让其充电到100%呢? 右下角…

LLM大语言模型算法特训,带你转型AI大语言模型算法工程师(完结)

LLM大语言模型算法 与AI大语言模型算法工程师的联系 LLM(Large Language Model)大语言模型是指像GPT这样的大型自然语言处理模型,而AI大语言模型算法工程师则是负责开发和优化这些模型的专业人士。它们之间的联系可以从以下几个方面来理解&a…

【docker实战】使用代理的坑

在docker公共仓库被封禁的日子里,大多数人更喜欢使用镜像仓库代理源。 网上教程一大把,似乎不使用代理,就不会使用docker一样。 上图就是我设置的代理源镜像仓库。通常是设置/etc/docker/daemon.json这个文件实现的。 这样设置之后&#xff0…

Linux---​代码运行-程序的翻译过程

前言 我们平常用C/C语言写代码的时候,运行只是靠编译器,点一下运行按钮就会出现我们代码运行的结果,那我们的代码究竟是怎么得到最终结果的呢?还是非常值得我们去了解与学习的。 一、翻译过程 > 预处理 预处理功能主要包括宏…

java第二十三课 —— 继承

面向对象的三大特征 继承 继承可以解决代码复用,让我们的编程更加靠近人类思维,当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子…

虚拟淘宝-Virtual-Taobao论文解读(AAAI2019)

目录 1 论文简介 2 文章的主要贡献 3 文章技术的简要说明 4 技术的详细说明 4.1 GAN-SD:生成客户特征 4.2 MAIL:生成交互过程 4.3 ANC:动规范约束 5 实验设定及结果 6 结论 7 参考 1 论文简介 南京大学LAMDA团队的侍竞成、俞扬等…

【服务器硬件由 CPU、RAM、硬盘等组成,选购时需考虑应用需求、预算等。散热、安全、监控与维护亦重要,未来发展趋势包括高性能、低能耗和智能化。】

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

MySQL----索引的底层实现和原理

索引 在前面的文章中,我们分析了索引的分类、创建、删除以及索引的创建原则等,知道了创建索引的目的就是为了加速对表中的数据行的检索而创造的一种分散存储的数据结构。那么索引的底层结构是什么呢? 底层实现 数据库索引是存储在磁盘上的…

PDF标准详解(三)—— PDF坐标系统和坐标变换

之前我们了解了PDF文档的基本结构,并且展示了一个简单的hello world。这个hello world 虽然只在页面中显示一个hello world 文字,但是包含的内容却是不少。这次我们仍然以它为切入点,来了解PDF的坐标系统以及坐标变换的相关知识 图形学中二维…

OpenCV学习(4.15) 基于 GrabCut 算法的交互式前景提取

1. 目标 在这一章当中 我们将看到 GrabCut 算法来提取图像中的前景我们将为此创建一个交互式应用程序。 2. 理论 GrabCut 算法由英国剑桥微软研究院 Carsten Rother,Vladimir Kolmogorov和Andrew Blake发明,并在他们的论文“GrabCut”:使…

LLM之RAG实战(四十)| 使用LangChain SQL Agent和MySQL搭建多层RAG ChatBot

在传统的意义上,RAG 主要是从文档中检索用户想要的数据,从而提高大模型的能力,减少幻觉问题。今天,我们从另一个维度介绍RAG,RAG不从文档中获取数据,而是从MySQL数据库检索数据。我们可以使用LangChain SQL…

Vue40-vueComponent构造函数

一、组件的本质:VueComponent构造函数 组件的本质是:构造函数 二、每一次调用vue.extend,返回的事一个全新的 VueComponent VueComponent的源码如下: 三、组件中的this 组件中的this是VueComponent实例对象,结构和vm…

如果给电商系统颜值搞排名,我觉得淘宝千牛系统是天花板了。

淘宝的商家操作界面-千牛系统经过多年的迭代,无论从颜值上、功能上还是用户体验上都是行业天花板的存在,我截图软件上的一些图给大家分享下。

网络编程之XDP和TC

一、TC之于XDP 在前面分析过XDP,今天简单分析一下与其相关的TC,即traffic control,流量控制。在分析XDP时知道其只能用于ingress方向触发,而TC却可以在两个方向即ingress和egress方向触发。也可以简单理解成它可以同时钩住进出两个方向的数据…