使用Tkinter作为GUI模块以及python基础,开发一款身份证号码校验的系统。
功能概览:
Tkinter是Python标准库中的一个用于创建图形用户界面的模块。它提供了一组用于构建GUI的组件,例如窗口、按钮、菜单、文本框等。
下面是一个简单的例子,它创建了一个窗口,包含一个文本框和一个按钮。用户在文本框中输入身份证号码,点击按钮后,程序会解析并校验身份证号码的有效性。
校验身份证号码的校验码是否正确。
在中国大陆,身份证号码由17位数字组成,最后一位为校验码。校验码的计算方法如下:
将身份证号码的前17位数字依次与对应的系数相乘,系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
将乘积的各位数字相加,得到一个和值
将和值除以11,得到余数
如果余数为0,则校验码为1;如果余数为1,则校验码为0;其他情况下,校验码为11减去余数
下面是程序的完整代码,它实现了身份证号码的解析和校验功能:
import tkinter as tk
import tkinter.messagebox
from datetime import datetime
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
self.create_widgets()
def create_widgets(self):
self.id_label = tk.Label(self, text="身份证号码:")
self.id_label.pack()
self.id_input = tk.Entry(self)
self.id_input.pack()
self.check_button = tk.Button(self, text="检验", command=self.check_id)
self.check_button.pack()
def check_id(self):
id_str = self.id_input.get()
# 提取前6位数字,用于解析出生地
area_code = id_str[:6]
# 提取第7到第14位数字,用于解析出生日期
birth_date = id_str[6:14]
# 解析出生日期
# 将出生日期字符串转换为日期对象
birth_date = datetime.strptime(birth_date, "%Y%m%d")
# 通过校验码校验身份证号码的有效性
check_code_map = "10X98765432"
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 将身份证号码的前17位数字与对应的系数相乘
# 并将乘积的各位数字相加,得到一个和值
sum_ = sum(int(a) * b for a, b in zip(id_str[:17], weight))
# 将和值除以11,得到余数
mod = sum_ % 11
# 计算校验码
check_code = check_code_map[mod]
# 校验身份证号码的校验码是否正确
valid = check_code == id_str[17]
# 官方公布的地区代码表...
area_table = {
"110000": "北京市",
"120000": "天津市",
# ...
}
area = area_table.get(area_code, "未知地区")
# 显示解析结果
result = (
f"出生地: {area}\n"
f"出生日期: {birth_date:%Y-%m-%d}\n"
f"身份证号码: {'合法' if valid else '无效'}\n"
)
tk.messagebox.showinfo("解析结果", result)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
将出生日期字符串转换为日期对象,以便于更方便的显示和处理。
接着,我们通过校验码算法,计算出身份证号码的校验码,并与身份证号码的最后一位进行比较,如果一致,则表示身份证号码合法,否则为无效。
最后,我们通过tk.messagebox模块的showinfo方法,显示解析结果。
需要注意的是,上面给出的程序只是一个简单的例子,实际使用中,还需要处理更多的细节和异常情况,例如:
- 身份证号码的长度不正确(应为18位)
- 身份证号码中的前17位数字不是数字
- 身份证号码中的校验码不是数字
- 解析出生地时,无法找到对应的地区
- 解析出生日期时,出生日期字符串格式不正确
为了避免程序出现这些异常情况,我们需要进行适当的处理,例如使用try/except语句进行异常捕获,或者对身份证号码的格式进行严格的正则表达式验证。