最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+PyQt開發(fā)證件號智能校驗(yàn)工具

 更新時間:2025年09月23日 09:25:57   作者:Goona_  
在數(shù)字化轉(zhuǎn)型加速的背景下,證件信息核驗(yàn)已成為剛需,本文將基于PyQt框架與Python語言開發(fā)的證件號智能校驗(yàn)工具,感興趣的小伙伴可以了解下

一、引言

在數(shù)字化轉(zhuǎn)型加速的背景下,證件信息核驗(yàn)已成為金融、政務(wù)、安防等領(lǐng)域的剛需。傳統(tǒng)人工校驗(yàn)存在效率低、易出錯等問題,而基于PyQt框架與Python語言開發(fā)的證件號智能校驗(yàn)工具,通過圖形化界面與自動化算法,實(shí)現(xiàn)了高效、精準(zhǔn)的證件信息驗(yàn)證,顯著降低人工核驗(yàn)成本,提升數(shù)據(jù)合規(guī)性。開發(fā)靈感來源于企業(yè)實(shí)名認(rèn)證、政務(wù)服務(wù)窗口、物聯(lián)網(wǎng)設(shè)備身份綁定等場景。

二、GUI界面設(shè)計

使用PyQt5進(jìn)行界面的搭建,界面如下: 

初始界面搭建采用極簡風(fēng)格。當(dāng)輸入合法的身份證號碼后,點(diǎn)擊“開始校驗(yàn)”,則會出現(xiàn)對應(yīng)提示(是合法的);否則,不僅會告知用戶此身份證號碼不合法,同時還會根據(jù)輸入身份證號碼的前17位自動計算第18位的校驗(yàn)碼,最后將正確的校驗(yàn)碼結(jié)果告知給用戶。

1.相關(guān)提示

若輸入非法,即出現(xiàn)漢字符、或位數(shù)不等于18等常見特殊情況,直接點(diǎn)擊“開始校驗(yàn)”后,會彈出對應(yīng)相關(guān)提示。

2.效果演示

3.界面設(shè)計.py

通過pyuic5產(chǎn)生的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, QtWidgets


class 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.translate
        Form.setWindowTitle(_translate("Form", "Identification_card"))
        self.label_5.setText(_translate("Form", "Designed By"))
        self.label_8.setText(_translate("Form", "身份證校驗(yàn)工具"))
        self.label.setText(_translate("Form", "請輸入您的身份證號碼:"))
        self.pushButton.setText(_translate("Form", "開始校驗(yàn)"))
        self.label_2.setText(_translate("Form", "校驗(yàn)結(jié)果如下:"))
import ziyuan_rc

三、主要程序詳解

1.導(dǎo)入相關(guān)模塊

import sys
from UI_IdentificationCard import *
from PyQt5.QtWidgets import QApplication, QWidget

# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

導(dǎo)入前端頁面設(shè)計文件:UI_IdentificationCard.py;不懂為啥需要導(dǎo)入Qtcore的,請看一鍵曝光:Python+PyQt實(shí)現(xiàn)的文件目錄。

2.初始化設(shè)置

    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)

為控制告知用戶校驗(yàn)結(jié)果的顯示與否,在初始化的時候,需要先將可視狀態(tài)visible設(shè)置為False,再檢測pushbutton是否被按下,并將其鏈接到j(luò)iaoyan函數(shù)。

3.校驗(yàn)過程

    def jiaoyan(self):
        he = 0
        jiaquan_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%11
                jiaoyanma = 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最后一位校驗(yàn)碼應(yīng)為:"+str(jiaoyanma))
            else:
                QtWidgets.QMessageBox.critical(self, "提示", "請檢查身份證號碼位數(shù)!")
        else:
            QtWidgets.QMessageBox.critical(self, "提示", "請輸入身份證號碼!")

加權(quán)和用he表示;jiaquan_lst表示加權(quán)因子表,不同位置序號對應(yīng)不同的加權(quán)因子;加權(quán)因子表和校驗(yàn)碼表如下所示:

首先獲取用戶輸入框edittext的內(nèi)容并將其存儲在i_card變量中,接著通過切片獲取i_card的前17位截取前17位的原因是:存在最后一位為X的特殊情況),并判斷其是否由純數(shù)字組成;如果長度再符合要求(即等于18),則可以通過循環(huán)將前17位進(jìn)行加權(quán)和;最后將加權(quán)和對11取余得到y(tǒng)u,同時在校驗(yàn)碼表中找到對應(yīng)的校驗(yàn)碼;通過比較用戶輸入身份證號的最后一位與真實(shí)計算得到的校驗(yàn)碼,判斷該身份證號是否合法及給出相應(yīng)的提示。

補(bǔ)充校驗(yàn)碼計算方法:

將前 17 位號碼與相應(yīng)的加權(quán)因子相乘并求和。將所得總和除以 11 取余,根據(jù)余數(shù)匹配校驗(yàn)碼對照表,得到最終的校驗(yàn)碼。 

校驗(yàn)碼計算示例: 

假設(shè)身份證號碼前 17 位為 11223344556677890(示例數(shù)據(jù),非實(shí)際號碼)。

1.逐位相乘加權(quán)因子并求和: 1×7+1×9+2×10+2×5+?+9×4+0×2=440

2.將結(jié)果 除以 11 取余: 440mod  11=0

3.根據(jù)校驗(yàn)碼對照表,余數(shù) 0 對應(yīng)的校驗(yàn)碼為 1。

因此,該身份證號碼的完整形式為:112233445566778901。

說明:

本程序僅可判斷用戶輸入身份證號碼的正確性,且僅判斷最后一位校驗(yàn)碼是否正確。若正確,給出“合法”提示,否則給出“非法”提示并給出正確的校驗(yàn)碼。

四、總程序代碼

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 = 0
        jiaquan_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%11
                jiaoyanma = 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最后一位校驗(yàn)碼應(yīng)為:"+str(jiaoyanma))
            else:
                QtWidgets.QMessageBox.critical(self, "提示", "請檢查身份證號碼位數(shù)!")
        else:
            QtWidgets.QMessageBox.critical(self, "提示", "請輸入身份證號碼!")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = login_interface()
    w.show()
    sys.exit(app.exec_())

到此這篇關(guān)于Python+PyQt開發(fā)證件號智能校驗(yàn)工具的文章就介紹到這了,更多相關(guān)Python身份證校驗(yàn)工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Python編程中基本的數(shù)學(xué)計算使用

    詳解Python編程中基本的數(shù)學(xué)計算使用

    這篇文章主要介紹了Python編程中基本的數(shù)學(xué)計算使用,其中重點(diǎn)講了除法運(yùn)算及相關(guān)division模塊的使用,需要的朋友可以參考下
    2016-02-02
  • python基于OpenCV模塊實(shí)現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    python基于OpenCV模塊實(shí)現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    這篇文章主要介紹了python基于OpenCV模塊實(shí)現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù),這里今天主要是實(shí)踐一下視頻流數(shù)據(jù)的預(yù)處理工作,需要的朋友可以參考下
    2022-05-05
  • Python代碼中偏函數(shù)的使用詳解

    Python代碼中偏函數(shù)的使用詳解

    Python中的偏函數(shù)是來自函數(shù)式編程的一個強(qiáng)大工具,它的主要目標(biāo)是減少函數(shù)調(diào)用的復(fù)雜性,本文將詳細(xì)介紹偏函數(shù)的具體使用,需要的小伙伴可以了解下
    2023-12-12
  • python鏈接sqlite數(shù)據(jù)庫的詳細(xì)代碼實(shí)例

    python鏈接sqlite數(shù)據(jù)庫的詳細(xì)代碼實(shí)例

    SQLite數(shù)據(jù)庫是一款非常小巧的嵌入式開源數(shù)據(jù)庫軟件,也就是說沒有獨(dú)立的維護(hù)進(jìn)程,所有的維護(hù)都來自于程序本身,它是遵守ACID的關(guān)聯(lián)式數(shù)據(jù)庫管理系統(tǒng),它的設(shè)計目標(biāo)是嵌入式的,而且目前已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低
    2021-09-09
  • 使用Python發(fā)送HTML格式郵件的步驟詳解

    使用Python發(fā)送HTML格式郵件的步驟詳解

    在現(xiàn)代通信中,電子郵件是一種常見的溝通方式,通過Python編程語言,您可以使用內(nèi)置的庫來發(fā)送郵件,并在郵件中嵌入HTML內(nèi)容和圖片,本文將介紹如何使用Python發(fā)送帶有HTML格式內(nèi)容,以及涉及的步驟和代碼示例
    2023-08-08
  • 使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一)

    使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一)

    這篇文章主要介紹了使用Python將xmind腦圖轉(zhuǎn)成excel用例的實(shí)現(xiàn)代碼(一),本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Python調(diào)整PDF文檔頁邊距的方法小結(jié)

    Python調(diào)整PDF文檔頁邊距的方法小結(jié)

    PDF 文檔中的邊距是指環(huán)繞每頁內(nèi)容的空白區(qū)域,充當(dāng)文本或圖像與頁面邊緣之間的緩沖區(qū),本文將介紹如何使用 Spire.PDF for Python 修改 PDF 文檔的頁邊距,為不同使用場景定制合適的文檔布局,需要的朋友可以參考下
    2024-05-05
  • 在Python中編寫數(shù)據(jù)庫模塊的教程

    在Python中編寫數(shù)據(jù)庫模塊的教程

    這篇文章主要介紹了在Python中編寫數(shù)據(jù)庫模塊的教程,本文代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • Python?os和os.path模塊詳情

    Python?os和os.path模塊詳情

    這篇文章主要介紹了Python?os和os.path模塊詳情,文章圍繞主題展開詳細(xì)的相關(guān)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-04-04
  • Python3實(shí)現(xiàn)mysql連接和數(shù)據(jù)框的形成(實(shí)例代碼)

    Python3實(shí)現(xiàn)mysql連接和數(shù)據(jù)框的形成(實(shí)例代碼)

    這篇文章主要介紹了Python3實(shí)現(xiàn)mysql連接和數(shù)據(jù)框的形成,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01

最新評論

枣强县| 沙坪坝区| 集安市| 农安县| 定结县| 永寿县| 双流县| 曲阳县| 礼泉县| 张家川| 怀仁县| 洛浦县| 洪洞县| 孟州市| 通渭县| 闽清县| 枝江市| 玉门市| 邵武市| 诏安县| 龙江县| 关岭| 丹寨县| 临夏县| 城口县| 南丹县| 高阳县| 什邡市| 宜阳县| 望谟县| 连州市| 曲水县| 郁南县| 安平县| 普陀区| 浪卡子县| 大关县| 郁南县| 吉木乃县| 南通市| 获嘉县|