目录

一、引言

二、GUI界面设计

1.相关提示

2.效果演示

3.界面设计.py

三、主要程序详解

1.导入相关模块

2.初始化设置

3.校验过程

四、总程序代码


一、引言

在数字化转型加速的背景下,证件信息核验已成为金融、政务、安防等领域的刚需。传统人工校验存在效率低、易出错等问题,而基于PyQt框架与Python语言开发的证件号智能校验工具,通过图形化界面与自动化算法,实现了高效、精准的证件信息验证,显著降低人工核验成本,提升数据合规性。开发灵感来源于企业实名认证、政务服务窗口、物联网设备身份绑定等场景。

二、GUI界面设计

使用PyQt5进行界面的搭建,界面如下:

  

初始界面搭建采用极简风格。当输入合法的身份证号码后,点击“开始校验”,则会出现对应提示(是合法的);否则,不仅会告知用户此身份证号码不合法,同时还会根据输入身份证号码的前17位自动计算第18位的校验码,最后将正确的校验码结果告知给用户。

1.相关提示

若输入非法,即出现汉字符、或位数不等于18等常见特殊情况,直接点击“开始校验”后,会弹出对应相关提示。

2.效果演示

3.界面设计.py

通过pyuic5产生的GUI界面代码UI_IdentificationCard.py如下:

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'UI_IdentificationCard.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.setEnabled(True)Form.resize(300, 390)Form.setMinimumSize(QtCore.QSize(300, 390))Form.setMaximumSize(QtCore.QSize(300, 390))icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)Form.setWindowIcon(icon)self.label_5 = QtWidgets.QLabel(Form)self.label_5.setGeometry(QtCore.QRect(150, 50, 141, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_5.setFont(font)self.label_5.setObjectName("label_5")self.label_8 = QtWidgets.QLabel(Form)self.label_8.setGeometry(QtCore.QRect(70, 20, 181, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)font.setBold(False)font.setWeight(50)self.label_8.setFont(font)self.label_8.setObjectName("label_8")self.label_10 = QtWidgets.QLabel(Form)self.label_10.setGeometry(QtCore.QRect(230, 40, 71, 51))self.label_10.setText("")self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))self.label_10.setObjectName("label_10")self.lineEdit = QtWidgets.QLineEdit(Form)self.lineEdit.setGeometry(QtCore.QRect(30, 150, 241, 20))self.lineEdit.setObjectName("lineEdit")self.label = QtWidgets.QLabel(Form)self.label.setGeometry(QtCore.QRect(30, 130, 161, 16))self.label.setObjectName("label")self.pushButton = QtWidgets.QPushButton(Form)self.pushButton.setGeometry(QtCore.QRect(30, 190, 241, 23))self.pushButton.setObjectName("pushButton")self.label_2 = QtWidgets.QLabel(Form)self.label_2.setGeometry(QtCore.QRect(30, 230, 171, 16))self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(Form)self.label_3.setGeometry(QtCore.QRect(30, 250, 241, 111))self.label_3.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_3.setText("")self.label_3.setAlignment(QtCore.Qt.AlignCenter)self.label_3.setObjectName("label_3")self.retranslateUi(Form)QtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Identification_card"))self.label_5.setText(_translate("Form", "Designed By"))self.label_8.setText(_translate("Form", "身份证校验工具"))self.label.setText(_translate("Form", "请输入您的身份证号码:"))self.pushButton.setText(_translate("Form", "开始校验"))self.label_2.setText(_translate("Form", "校验结果如下:"))
import ziyuan_rc

三、主要程序详解

1.导入相关模块

import sys
from UI_IdentificationCard import *
from PyQt5.QtWidgets import QApplication, QWidget# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

导入前端页面设计文件:UI_IdentificationCard.py;不懂为啥需要导入Qtcore的,请看一键曝光:Python+PyQt实现的文件目录透视镜

2.初始化设置

    def __init__(self):super(QWidget, self).__init__()self.setupUi(self)self.label_2.setVisible(False)self.label_3.setVisible(False)self.pushButton.clicked.connect(self.jiaoyan)

为控制告知用户校验结果的显示与否,在初始化的时候,需要先将可视状态visible设置为False,再检测pushbutton是否被按下,并将其链接到jiaoyan函数。

3.校验过程

    def jiaoyan(self):he = 0jiaquan_lst = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]jiaoyan_lst = ['1','0','X','9','8','7','6','5','4','3','2']i_card = self.lineEdit.text()if i_card[0:16].isdigit():if len(i_card) == 18:for i in range(len(i_card)-1):he = he + jiaquan_lst[i]*int(i_card[i])yu = he%11jiaoyanma = jiaoyan_lst[yu]self.label_2.setVisible(True)self.label_3.setVisible(True)if str(jiaoyanma) == i_card[-1]:self.label_3.setText("该身份证号码合法!")else:self.label_3.setText("该身份证号码非法!\n最后一位校验码应为:"+str(jiaoyanma))else:QtWidgets.QMessageBox.critical(self, "提示", "请检查身份证号码位数!")else:QtWidgets.QMessageBox.critical(self, "提示", "请输入身份证号码!")

加权和用he表示;jiaquan_lst表示加权因子表,不同位置序号对应不同的加权因子;加权因子表和校验码表如下所示:

首先获取用户输入框edittext的内容并将其存储在i_card变量中,接着通过切片获取i_card的前17位截取前17位的原因是:存在最后一位为X的特殊情况),并判断其是否由纯数字组成;如果长度再符合要求(即等于18),则可以通过循环将前17位进行加权和;最后将加权和对11取余得到yu,同时在校验码表中找到对应的校验码;通过比较用户输入身份证号的最后一位与真实计算得到的校验码,判断该身份证号是否合法及给出相应的提示。

补充校验码计算方法:

将前 17 位号码与相应的加权因子相乘并求和。将所得总和除以 11 取余,根据余数匹配校验码对照表,得到最终的校验码。 

校验码计算示例: 

假设身份证号码前 17 位为 11223344556677890(示例数据,非实际号码)。

1.逐位相乘加权因子并求和: 1×7+1×9+2×10+2×5+⋯+9×4+0×2=440

2.将结果 除以 11 取余: 440mod  11=0

3.根据校验码对照表,余数 0 对应的校验码为 1。

因此,该身份证号码的完整形式为:112233445566778901。

说明:

本程序仅可判断用户输入身份证号码的正确性,且仅判断最后一位校验码是否正确。若正确,给出“合法”提示,否则给出“非法”提示并给出正确的校验码。

四、总程序代码

import sys
from UI_IdentificationCard import *
from PyQt5.QtWidgets import QApplication, QWidget# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)class login_interface(QWidget, Ui_Form):def __init__(self):super(QWidget, self).__init__()self.setupUi(self)self.label_2.setVisible(False)self.label_3.setVisible(False)self.pushButton.clicked.connect(self.jiaoyan)def jiaoyan(self):he = 0jiaquan_lst = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]jiaoyan_lst = ['1','0','X','9','8','7','6','5','4','3','2']i_card = self.lineEdit.text()if i_card[0:16].isdigit():if len(i_card) == 18:for i in range(len(i_card)-1):he = he + jiaquan_lst[i]*int(i_card[i])yu = he%11jiaoyanma = jiaoyan_lst[yu]self.label_2.setVisible(True)self.label_3.setVisible(True)if str(jiaoyanma) == i_card[-1]:self.label_3.setText("该身份证号码合法!")else:self.label_3.setText("该身份证号码非法!\n最后一位校验码应为:"+str(jiaoyanma))else:QtWidgets.QMessageBox.critical(self, "提示", "请检查身份证号码位数!")else:QtWidgets.QMessageBox.critical(self, "提示", "请输入身份证号码!")if __name__ == '__main__':app = QApplication(sys.argv)w = login_interface()w.show()sys.exit(app.exec_())

欢迎留言/私信沟通交流!

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

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

相关文章

主流技术栈 NestJS、TypeScript、Node.js版本使用统计

📊 2024年主流技术栈版本使用统计🔧 TypeScript 采用情况全球采用率: 38.5% 的开发者使用 TypeScript(Stack Overflow 2024)增长趋势: 从 2017年的 12% 增长到 2024年的 35%(JetBrains 调研)TypeScript vs …

Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通

Techub News 消息,香港 Web3 媒体 Techub News 与韩国区块链媒体 TOKENPOST 达成战略合作。TOKENPOST 将开设香港内容板块,由 Techub News 提供本地化行业资讯;同时 Techub News 将推出韩国内容专栏,内容源由 TOKENPOST 支持。这一…

Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)

文章目录一、前言1.1 什么是JVM内存结构1.2 JVM内存结构与Java内存模型的区别1.3 为什么面试官爱问JVM内存结构二、JVM运行时数据区总览2.1 运行时数据区域划分2.2 线程私有区域 vs 线程共享区域三、线程私有区域详解3.1 程序计数器(PC Register)3.1.1 定…

鸿蒙中使用极光推送

官方给出的步骤是对的,就是一时不知道从何下手,自己整了下,按照这个来就行 1.步骤 打开 APP 通知功能 1.先按照这个页面进行配置SDK 集成指南 - 极光文档,主要就是下载极光sdk,然后在AGC里开通推送服务,配…

ruoyi_wvp流媒体[海康 大华 GB1812 onvif rtsp]

ZLMediaKitxiaz: https://download.csdn.net/download/jinhuding/91775096 webrtc: https://download.csdn.net/download/jinhuding/91764243 yoloonnx(v3,v7,v8s,v9c):https://download.csdn.net/download/jinhuding/91775170 项目部署步骤 1.后端目录结构 2.前端…

强化学习笔记(二):有限马尔可夫决策过程(一)

有限马尔可夫决策过程 基本概念 多臂老虎机仅涉及评价性反馈,即动作的即时奖励,估计每个动作 aaa 的价值 q∗(a)q_*(a)q∗​(a)。 有限马尔可夫决策过程(Finite MDP)引入了关联性因素,即在不同状态(情境&am…

Maven项目中settings.xml终极优化指南

文章目录1. 基础优化2. 镜像源优化(国内推荐)3. 插件仓库优化4. 并行构建提升 30%-80%5. 下载可靠性优化6. CI/CD 环境优化7. 进阶:依赖锁定与预下载8. 实现效果Maven settings.xml 终极优化指南,重点是:构建速度提升、…

RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd 函数在STM32的标准外设库中扮演着“电源开关”的角色。要理解这个函数,我们需要明白STM32微控制器的几个关键概念:1. 外设时钟与低功耗设计STM32内部有非常多的外设,如GPIO(A, B, C...D)、USAR…

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training

用大语言模型实现语音到语音翻译的新方法:Scheduled Interleaved Speech-Text Training 在人工智能领域,语音到语音翻译(Speech-to-Speech Translation, S2ST)一直是极具挑战性的任务。传统的做法是将语音识别、文本翻译和语音合成三个步骤串联起来,而近年来,端到端的S2…

LLM学习:langchain架构——模型IO

1、什么是模型IO模型 I/O(Model I/O) 是 LangChain 框架中最核心的模块之一,负责处理与语言模型(LLM)交互的输入构建、模型调用和输出解析全流程。它主要分为三个模块:Prompts(输入构建&#xf…

Windows系统下python新一代三方库管理工具uv及VSCode配置

python新一代三方库管理工具uv uv是什么? uv是用RUST语言写的一个python三方库和项目管理工具,详见官网(uv)。 uv的安装 官网上提供了两种安装方式,第一种需要在PS终端里运行一下命令进行安装: powersh…

Node.js 多版本管理工具 nvm 的安装与使用教程(含镜像加速与常见坑)

适用人群:前端/后端/全栈开发者,Mac/Linux/Windows(nvm-windows)用户;需要在多项目间快速切换 Node 版本、或在国内网络环境下稳定安装 Node。一、为什么要用 nvm?一机多版本:不同项目依赖不同 …

Unity Shader unity文档学习笔记(二十一):几种草体的实现方式(透明度剔除,GPU Instaning, 曲面细分+几何着色器实现)

1.透明度剔除(性能较差,不同颜色时需要不同材质会导致多个dc) clip(_Color.a - _Cutoff); 传入值为0时 剔除 类似的草体效果: 2.GPU Instaning(可以自定义一次性合批最多1023个,能够传递颜色值等等(做草…

UX 设计入门终章:让洞察落地!用用户流程图、IA 和旅程图,设计用户与产品的互动故事

欢迎来到本系列课程的最后一课。 如果你把之前的学习比作是绘制一份建筑蓝图,那么今天,你将根据自己收集到的所有用户数据,描绘出空间布局(用户流程图)、理清结构关系(信息架构),并最…

【RAG知识库实践】向量数据库VectorDB

一、概述 1.1 什么是向量库 向量数据库是一种专门为存储、索引和查询高维向量数据而优化的数据库系统。与传统的关系型数据库不同,向量数据库将数据映射到向量空间中,使得数据的相似性计算、聚类、分类和检索变得更加高效和精确 向量数据库一般包括以下几个部分:索引、查询…

EasyExcel 3.x 导出动态表头,动态sheet页

动态导出sheet页Overridepublic void exportAnswerListV1(HttpServletResponse response, SmtSurveyUserAnswerRecord smtSurveyUserAnswerRecord) {// 1. 准备问卷数据String formType smtSurveyUserAnswerRecord.getFormType();if (ObjectUtil.isEmpty(formType)) {throw ne…

重学JS-004 --- JavaScript算法与数据结构(四)JavaScript 表单验证

文章目录HTMLlabel 属性input 属性button 属性fieldset 属性select 属性option 属性div 属性scriptgetElementByIdquerySelectorAllnull循环模版文字函数事件监听器regex举例StringMathArrayHTML HTML 属性应该用双引号引起来。 label 属性 for“” input 属性 id“” typ…

本地搭建 Redis/MySQL 并配置国内镜像加速(Docker/原生安装 | macOS/Linux/Windows)

适用人群:前端/后端/数据/测试工程师;需要在单机上快速搭建 Redis 与 MySQL 的开发环境;同时在国内网络环境下加速下载(容器镜像、系统包仓库)。文章结构:一图流 → TL;DR → Docker 方式 → 原生安装&…

SynClub-百度在海外推出的AI社交产品

本文转载自:SynClub-百度在海外推出的AI社交产品 - Hello123工具导航 ** 一、🤖 SynClub 是什么? SynClub 是百度出海的 AI 社交产品,主打 "打造专属 AI 朋友" 的创新概念,让你在虚拟世界拥有真正懂你的贴…

Easy Rules规则引擎:轻量级Java规则处理实践指南

引言:业务规则与代码解耦的艺术 在现代软件开发中,业务规则频繁变更与核心逻辑稳定性之间的矛盾日益突出。传统硬编码的if-else语句在面对复杂业务场景时会导致: 代码臃肿:成百上千的条件分支难以维护 耦合度高:业务逻辑与系统架构深度绑定 变更成本高:微小规则调整需要…