
python构建的身份证校验码验证程序的极简界面实现,使用Tkinter构建图形用户界面:
身份证校验工具
关身份证校验码验证键特性说明:
-
用户友好界面:使用Tkinter构建了直观的图形界面,包含输入框、按钮和结果显示区域
-
实时验证:支持回车键快速验证,提供清晰的视觉反馈
-
完整验证逻辑:实现了标准的身份证校验码验证算法,包括长度检查、数字格式检查和校验码计算
-
错误处理:对各类输入错误提供友好的提示信息
-
响应式设计:界面布局合理,支持滚动查看长文本结果
运行此程序将打开一个图形窗口,您可以输入身份证号码进行实时验证。程序会自动检查号码格式并显示详细的验证结果。
import tkinter as tk
from tkinter import messagebox, ttk
class IDValidatorGUI:
def __init__(self, root):
self.root = root
self.root.title("身份证校验工具")
self.root.geometry("400x300")
self.root.resizable(False, False)
# 设置样式
self.setup_styles()
# 创建界面组件
self.create_widgets()
def setup_styles(self):
"""设置界面样式"""
style = ttk.Style()
style.configure("TLabel", font=("微软雅黑", 10))
style.configure("TButton", font=("微软雅黑", 10))
style.configure("TEntry", font=("微软雅黑", 10))
def create_widgets(self):
"""创建界面组件"""
# 主标题
title_label = ttk.Label(self.root, text="身份证号码校验", font=("微软雅黑", 16, "bold"))
title_label.pack(pady=20)
# 输入框和标签
input_frame = ttk.Frame(self.root)
input_frame.pack(pady=10, padx=20, fill="x")
ttk.Label(input_frame, text="请输入身份证号码:").pack(anchor="w")
self.id_entry = ttk.Entry(input_frame, font=("Consolas", 12), width=30)
self.id_entry.pack(pady=5, fill="x")
self.id_entry.bind("<Return>", lambda event: self.validate_id()) # 回车键绑定
# 按钮框架
button_frame = ttk.Frame(self.root)
button_frame.pack(pady=15)
ttk.Button(button_frame, text="校验", command=self.validate_id).pack(side="left", padx=5)
ttk.Button(button_frame, text="清空", command=self.clear_input).pack(side="left", padx=5)
ttk.Button(button_frame, text="退出", command=self.root.quit).pack(side="left", padx=5)
# 结果显示区域
result_frame = ttk.LabelFrame(self.root, text="校验结果", padding=10)
result_frame.pack(pady=10, padx=20, fill="both", expand=True)
self.result_text = tk.Text(result_frame, height=8, font=("微软雅黑", 9),
wrap="word", state="disabled", bg="#f0f0f0")
scrollbar = ttk.Scrollbar(result_frame, orient="vertical", command=self.result_text.yview)
self.result_text.configure(yscrollcommand=scrollbar.set)
self.result_text.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")
def validate_id(self):
"""验证身份证号码"""
id_number = self.id_entry.get().strip()
if not id_number:
messagebox.showwarning("输入错误", "请输入身份证号码")
return
# 清空之前的结果
self.result_text.config(state="normal")
self.result_text.delete(1.0, tk.END)
# 执行验证
is_valid, message = self.check_id_number(id_number)
# 显示结果
if is_valid:
self.result_text.insert(tk.END, f"✅ 验证通过!\n\n", "success")
self.result_text.insert(tk.END, f"身份证号码: {id_number}\n")
self.result_text.insert(tk.END, "校验结果: 格式正确,校验码验证通过\n")
else:
self.result_text.insert(tk.END, f"❌ 验证失败!\n\n", "error")
self.result_text.insert(tk.END, f"身份证号码: {id_number}\n")
self.result_text.insert(tk.END, f"错误信息: {message}\n")
# 设置文本样式标签
self.result_text.tag_configure("success", foreground="green", font=("微软雅黑", 10, "bold"))
self.result_text.tag_configure("error", foreground="red", font=("微软雅黑", 10, "bold"))
self.result_text.config(state="disabled")
def clear_input(self):
"""清空输入和结果"""
self.id_entry.delete(0, tk.END)
self.result_text.config(state="normal")
self.result_text.delete(1.0, tk.END)
self.result_text.config(state="disabled")
self.id_entry.focus()
def check_id_number(self, id_number):
"""验证身份证号码的核心算法"""
# 权重系数
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 校验码映射表
check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
# 1. 检查长度
if len(id_number) != 18:
return False, "身份证号码长度必须为18位"
# 2. 检查前17位是否为数字
if not id_number[:17].isdigit():
return False, "前17位必须全部为数字"
# 3. 计算加权和
total = 0
for i in range(17):
total += int(id_number[i]) * weights[i]
# 4. 计算校验码
z = total % 11
expected_check_code = check_codes[z]
# 5. 比较校验码(允许小写x)
actual_check_code = id_number[17].upper()
if actual_check_code == expected_check_code:
return True, "验证通过"
else:
return False, f"校验码错误,应为'{expected_check_code}',实际为'{actual_check_code}'"
def main():
"""主函数"""
root = tk.Tk()
app = IDValidatorGUI(root)
root.mainloop()
if __name__ == "__main__":
main()