欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、引言

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

二、GUI界面設(shè)計

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

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

1.相關(guān)提示

若輸入非法,即出現(xiàn)漢字符、或位數(shù)不等于18等常見特殊情況,直接點擊“開始校驗”后,會彈出對應(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", "身份證校驗工具"))
        self.label.setText(_translate("Form", "請輸入您的身份證號碼:"))
        self.pushButton.setText(_translate("Form", "開始校驗"))
        self.label_2.setText(_translate("Form", "校驗結(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實現(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)

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

3.校驗過程

    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ī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)因子表和校驗碼表如下所示:

首先獲取用戶輸入框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īng)的校驗碼;通過比較用戶輸入身份證號的最后一位與真實計算得到的校驗碼,判斷該身份證號是否合法及給出相應(yīng)的提示。

補充校驗碼計算方法:

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

校驗碼計算示例: 

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

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

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

3.根據(jù)校驗碼對照表,余數(shù) 0 對應(yīng)的校驗碼為 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 = 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ī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ā)證件號智能校驗工具的文章就介紹到這了,更多相關(guān)Python身份證校驗工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python解析多層json操作示例

    python解析多層json操作示例

    這篇文章主要介紹了python解析多層json操作,結(jié)合實例形式分析了Python針對多層json文件的讀取、解析、修改、保存等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • 淺析Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請求

    淺析Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請求

    這篇文章主要介紹了Django 接收所有文件,前端展示文件(包括視頻,文件,圖片)ajax請求,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2020-03-03
  • python數(shù)據(jù)類型_字符串常用操作(詳解)

    python數(shù)據(jù)類型_字符串常用操作(詳解)

    下面小編就為大家?guī)硪黄猵ython數(shù)據(jù)類型_字符串常用操作(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 一文掌握6種Python中常用數(shù)據(jù)庫操作及代碼

    一文掌握6種Python中常用數(shù)據(jù)庫操作及代碼

    在數(shù)據(jù)處理和管理領(lǐng)域,Python作為一種高效、易用的編程語言,擁有豐富的數(shù)據(jù)庫操作模塊,可以輕松實現(xiàn)對關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)操作,本文將介紹六種常見的Python數(shù)據(jù)庫操作模塊,需要的可以參考下
    2023-12-12
  • 在python中調(diào)用C/C++的三種方法

    在python中調(diào)用C/C++的三種方法

    這篇文章主要給大家介紹了關(guān)于在python中調(diào)用C/C++的三種方法,Python可以通過調(diào)用C/C++接口來實現(xiàn)與C/C++語言的交互,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • python 提高開發(fā)效率的5個小技巧

    python 提高開發(fā)效率的5個小技巧

    這篇文章主要介紹了python 提高開發(fā)效率的5個小技巧,幫助大家更好的進(jìn)行python開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • 解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題

    解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題

    這篇文章主要介紹了解決安裝torch后,torch.cuda.is_available()結(jié)果為false的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 淺談Python中(&,|)和(and,or)之間的區(qū)別

    淺談Python中(&,|)和(and,or)之間的區(qū)別

    這篇文章主要介紹了淺談Python中(&,|)和(and,or)之間的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • python array中關(guān)于[a,b,c]的使用方式

    python array中關(guān)于[a,b,c]的使用方式

    這篇文章主要介紹了python array中關(guān)于[a,b,c]的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 淺析AST抽象語法樹及Python代碼實現(xiàn)

    淺析AST抽象語法樹及Python代碼實現(xiàn)

    Abstract Syntax Tree抽象語法樹簡寫為ATS,是相當(dāng)于用樹結(jié)構(gòu)將代碼程式表現(xiàn)出來的一種數(shù)據(jù)結(jié)構(gòu),這里我們就來淺析AST抽象語法樹及Python代碼實現(xiàn)
    2016-06-06

最新評論