pyqt+Python證件號智能校驗工具

目錄

一、引言

二、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語句在面對復雜業務場景時會導致: 代碼臃腫:成百上千的條件分支難以維護 耦合度高:業務邏輯與系統架構深度綁定 變更成本高:微小規則調整需要…