使用wxpython的子模块wx.lib.agw.aui实现身份证验证输入错误提示修改建议的小程序,IDE运行和调试通过

传奇开心果编程
Python领域优质创作者
2024-09-12 09:37:50

img

源代码传奇开心果IDE运行和调试通过


import wx
import wx.lib.agw.aui as aui
import datetime
import re

# 地区码字典
area_codes = {
    '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': '澳门特别行政区'
}

class MainFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(MainFrame, self).__init__(*args, **kw)

        self.InitUI()

    def InitUI(self):
        self.SetTitle("身份证号码验证")
        self.SetSize((400, 300))
        self.Centre()

        # 创建菜单栏
        menubar = wx.MenuBar()
        operationMenu = wx.Menu()
        editMenu = wx.Menu()
        helpMenu = wx.Menu()

        verifyItem = operationMenu.Append(wx.ID_ANY, '验证')
        clearItem = editMenu.Append(wx.ID_ANY, '清除')
        copyItem = editMenu.Append(wx.ID_ANY, '复制')
        aboutItem = helpMenu.Append(wx.ID_ANY, '关于')
        helpItem = helpMenu.Append(wx.ID_ANY, '帮助')

        menubar.Append(operationMenu, '&操作')
        menubar.Append(editMenu, '&编辑')
        menubar.Append(helpMenu, '&帮助')

        self.SetMenuBar(menubar)

        # 绑定菜单事件
        self.Bind(wx.EVT_MENU, self.OnVerify, verifyItem)
        self.Bind(wx.EVT_MENU, self.OnClear, clearItem)
        self.Bind(wx.EVT_MENU, self.OnCopy, copyItem)
        self.Bind(wx.EVT_MENU, self.OnAbout, aboutItem)
        self.Bind(wx.EVT_MENU, self.OnHelp, helpItem)

        # 创建工具栏
        toolbar = self.CreateToolBar()
        verify_tool = toolbar.AddTool(wx.ID_ANY, '验证', wx.ArtProvider.GetBitmap(wx.ART_INFORMATION))
        clear_tool = toolbar.AddTool(wx.ID_ANY, '清除', wx.ArtProvider.GetBitmap(wx.ART_DELETE))
        copy_tool = toolbar.AddTool(wx.ID_ANY, '复制', wx.ArtProvider.GetBitmap(wx.ART_COPY))
        about_tool = toolbar.AddTool(wx.ID_ANY, '关于', wx.ArtProvider.GetBitmap(wx.ART_HELP))
        help_tool = toolbar.AddTool(wx.ID_ANY, '帮助', wx.ArtProvider.GetBitmap(wx.ART_QUESTION))
        toolbar.Realize()

        # 绑定工具栏事件
        self.Bind(wx.EVT_TOOL, self.OnVerify, verify_tool)
        self.Bind(wx.EVT_TOOL, self.OnClear, clear_tool)
        self.Bind(wx.EVT_TOOL, self.OnCopy, copy_tool)
        self.Bind(wx.EVT_TOOL, self.OnAbout, about_tool)
        self.Bind(wx.EVT_TOOL, self.OnHelp, help_tool)

        # 创建输入框
        self.input_field = wx.TextCtrl(self, style=wx.TE_PROCESS_ENTER)
        self.input_field.SetHint("请输入身份证号码")

        # 创建结果显示区域
        self.result_text = wx.StaticText(self, label="")

        # 布局
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.input_field, 0, wx.ALL | wx.EXPAND, 10)
        sizer.Add(self.result_text, 0, wx.ALL | wx.EXPAND, 10)
        self.SetSizer(sizer)

    def OnVerify(self, e):
        self.verify_id_number()

    def OnClear(self, e):
        self.input_field.Clear()

    def OnCopy(self, e):
        if self.input_field.GetValue():
            self.input_field.Copy()

    def OnAbout(self, e):
        wx.MessageBox("关于", "版本 1.0")

    def OnHelp(self, e):
        wx.MessageBox("帮助", "请输入有效的身份证号码进行验证")

    def verify_id_number(self):
        id_number = self.input_field.GetValue()

        # 非数字验证
        if not re.match(r'^\d{17}[\dX]$', id_number):
            self.result_text.SetLabel("身份证号码包含非数字字符,应为17位数字加1位校验位(数字或X)")
            self.result_text.SetForegroundColour(wx.RED)
            return

        if len(id_number) != 18:
            self.result_text.SetLabel("身份证号码长度不正确,应为18位")
            self.result_text.SetForegroundColour(wx.RED)
            return

        # 地区码验证
        area_code = id_number[:6]
        if area_code[:2] not in area_codes:
            self.result_text.SetLabel(f"地区码无效,前两位应为有效的地区码,如'11'代表北京市")
            self.result_text.SetForegroundColour(wx.RED)
            return

        # 出生日期验证
        birth_date = id_number[6:14]
        try:
            datetime.datetime.strptime(birth_date, '%Y%m%d')
        except ValueError:
            self.result_text.SetLabel("出生日期无效,格式应为YYYYMMDD,如1990年1月1日应为19900101")
            self.result_text.SetForegroundColour(wx.RED)
            return

        # 校验位验证
        weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
        check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
        sum_value = sum(int(id_number[i]) * weight[i] for i in range(17))
        if check_code[sum_value % 11] == id_number[17]:
            self.result_text.SetLabel("身份证号码有效")
            self.result_text.SetForegroundColour(wx.GREEN)
        else:
            self.result_text.SetLabel("校验位无效,请检查最后一位校验位")
            self.result_text.SetForegroundColour(wx.RED)

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame(None)
    frame.Show()
    app.MainLoop()

代码说明:

  1. 菜单栏 (wx.MenuBar): ◦ 创建一个菜单栏,包含“操作”、“编辑”和“帮助”三个菜单项。 ◦ 每个菜单项点击后显示一个提示信息,内容分别为“验证”、“清除”、“复制”、“关于”和“帮助”。
  2. 工具栏 (wx.ToolBar): ◦ 创建一个工具栏,包含五个图标按钮:“验证”、“清除”、“复制”、“关于”和“帮助”。 ◦ 使用wx.ArtProvider.GetBitmap方法获取内置的图标资源。 ◦ “验证”按钮点击后调用verify_id_number函数进行身份证号码验证。 ◦ “清除”按钮点击后清空输入框的内容。 ◦ “复制”按钮点击后将输入框的内容复制到剪贴板。 ◦ “关于”按钮点击后显示一个关于对话框。 ◦ “帮助”按钮点击后显示一个帮助对话框。
  3. 非数字验证:使用正则表达式 ^\d{17}[\dX]$ 检查输入的身份证号码是否为17位数字加1位校验位(数字或'X')。如果不符合此格式,提示“身份证号码包含非数字字符,应为17位数字加1位校验位(数字或X)”。
  4. 长度验证:如果身份证号码长度不正确,提示“身份证号码长度不正确,应为18位”。
  5. 地区码验证:如果地区码无效,提示“地区码无效,前两位应为有效的地区码,如'11'代表北京市”。
  6. 出生日期验证:如果出生日期无效,提示“出生日期无效,格式应为YYYYMMDD,如1990年1月1日应为19900101”。
  7. 校验位验证:如果校验位无效,提示“校验位无效,请检查最后一位校验位”。

运行效果: • 用户在输入框中输入身份证号码,点击工具栏中的“验证”按钮后,程序会根据输入的身份证号码进行非数字、长度、地区码、出生日期和校验位的验证,并在下方显示详细的验证结果和纠正建议。 • 菜单栏提供了“操作”、“编辑”和“帮助”选项,点击后会显示相应的提示信息。 • 工具栏提供了“验证”、“清除”、“复制”、“关于”和“帮助”功能,方便用户操作。 这样,用户不仅可以验证身份证号码,还可以通过菜单栏和工具栏获取更多信息和帮助,并进行快捷操作。

...全文
118 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
允许修改,二次开发

8

社区成员

发帖
与我相关
我的任务
社区描述
软件开发那些事
软件工程需求分析团队开发 个人社区 甘肃省·酒泉市
社区管理员
  • 传奇开心果编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧