python身份证升位 python身份证号码归属地查询

您所在的位置:网站首页 国内身份证号码查询验证码是多少 python身份证升位 python身份证号码归属地查询

python身份证升位 python身份证号码归属地查询

2024-07-14 12:06| 来源: 网络整理| 查看: 265

今天和大家分享的是利用Python做一个中国公民身份证号验证查询系统。

本系统可以实现身份证号真伪验证,年龄、性别及发证地查询,涉及知识主要有python字符串处理、表格读写和GUI制作。

首先我们先来了解一下身份证的构成。

python身份证升位 python身份证号码归属地查询_qt设置一个网格

18位身份证号码各位的含义:1-2位省、自治区、直辖市代码;3-4位地级市、盟、自治州代码;5-6位县、县级市、区代码;7-14位出生年月日,比如19820426代表1982年4月26日;15-17位为顺序号,其中17位(倒数第二位)男为单数,女为双数;18位为校验码,0-9和X。作为尾号的校验码,是由把前十七位数字带入统一的公式计算出来的,计算的结果是0-10,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位。X是罗马数字的10,用X来代替10。举例:330226 19820426 0012这个身份证号的含义: 33为浙江,02为宁波,26为宁海县,出生日期为1982年4月26日,顺序号为001,2为校验码。

第二步:归类整理地址码与区县对应关系

可以百度整理成Excel,实在找不到可以公众号找我要整理好的。

python身份证升位 python身份证号码归属地查询_Text_02

第三步:验证身份证号真伪

身份证最后一位校验码算法如下:

①将身份证号码前17位数分别乘以不同的系数,从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

②将得到的17个乘积相加。

③将相加后的和除以11并得到余数。

④余数可能为0 1 2 3 4 5 6 7 8 9 10这些个数字,其对应的身份证最后一位校验码为1 0 X 9 8 7 6 5 4 3 2。

验证实现代码:

python身份证升位 python身份证号码归属地查询_qt设置一个网格_03

第四步:查询地区

读取Excel整理的地区码匹配。实现代码:

python身份证升位 python身份证号码归属地查询_qt设置一个网格_04

第五步:查询性别和年龄

判断男女:对身份证16位对2求余判断奇偶,然后匹配,0为女,1为男。

判断年龄,获取系统时间的年减去输入身份证的7-10位。

实现代码:

python身份证升位 python身份证号码归属地查询_qt设置一个网格_05

最后:GUI界面设计

利用网格方式设置好界面的大小、标题,文本,文本框和按钮,并绑定。

查询按钮与check函数(信号)绑定。

python身份证升位 python身份证号码归属地查询_Text_06

把结果绑定回文本框

python身份证升位 python身份证号码归属地查询_python身份证升位_07

项目到此结束,快点动手起来吧。

完整项目代码如下:

import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * import random import requests from bs4 import BeautifulSoup import threading import pandas as pd import datetime data = pd.read_excel('全国身份证号对应省市区.xls', header=None, names=['身份证前六位', '所属地区']) gender_id = {'0': '女', '1': '男'} class Window(QWidget): def __init__(self, parent=None): super().__init__(parent) self.setWindowTitle("中国公民身份证号验证查询系统") self.layout = QGridLayout() self.setLayout(self.layout) # 局部布局 self.titleText = QTextBrowser() self.titleText.setText('中国公民身份证号验证查询系统') self.titleText.setStyleSheet( "font-size:24px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#0000CD") self.titleText.setAlignment(Qt.AlignCenter) self.titleText.setFixedSize(500, 40) self.layout.addWidget(self.titleText, 0, 0, 1, 3 , Qt.AlignCenter) self.Text = QTextBrowser() self.Text.setText('需查询身份证号码:') self.Text.setAlignment(Qt.AlignRight) self.Text.setStyleSheet( "vertical-align:middle;font-size:18px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#FFA500") self.Text.setFixedSize(180, 30) self.layout.addWidget(self.Text, 1, 0, Qt.AlignRight) self.idcardText = QLineEdit(self) self.idcardText.setFixedSize(210, 30) self.idcardText.setStyleSheet("font-size:16px;font-weight:500;background-color: rgba(255,255,255,180);border: none;color:#55007f") self.layout.addWidget(self.idcardText, 1, 1, Qt.AlignLeft) self.Text = QTextBrowser() self.Text.setText('查询结果:') self.Text.setAlignment(Qt.AlignRight) self.Text.setStyleSheet( "font-size:18px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#FFA500") self.Text.setFixedSize(105, 30) self.layout.addWidget(self.Text, 2, 0, Qt.AlignRight) self.resultText = QLineEdit(self) self.resultText.setFixedSize(210, 25) self.resultText.setStyleSheet( "font-size:16px;font-weight:500;background-color: rgba(255,255,255,180);border: none;color:#55007f") self.layout.addWidget(self.resultText, 2, 1, Qt.AlignLeft) self.Text = QTextBrowser() self.Text.setText('性别:') self.Text.setAlignment(Qt.AlignRight) self.Text.setStyleSheet( "font-size:18px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#FFA500") self.Text.setFixedSize(65, 30) self.layout.addWidget(self.Text, 3, 0, Qt.AlignRight) self.genderText = QLineEdit(self) self.genderText.setFixedSize(210, 25) self.genderText.setStyleSheet( "font-size:16px;font-weight:500;background-color: rgba(255,255,255,180);border: none;color:#55007f") self.layout.addWidget(self.genderText, 3, 1, Qt.AlignLeft) self.Text = QTextBrowser() self.Text.setText('年龄:') self.Text.setAlignment(Qt.AlignRight) self.Text.setStyleSheet( "font-size:18px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#FFA500") self.Text.setFixedSize(65, 30) self.layout.addWidget(self.Text, 4, 0, Qt.AlignRight) self.ageText = QLineEdit(self) self.ageText.setFixedSize(210, 25) self.ageText.setStyleSheet( "font-size:16px;font-weight:500;background-color: rgba(255,255,255,180);border: none;color:#55007f") self.layout.addWidget(self.ageText, 4, 1, Qt.AlignLeft) self.Text = QTextBrowser() self.Text.setText('发证地:') self.Text.setAlignment(Qt.AlignRight) self.Text.setStyleSheet( "font-size:18px;font-weight:700;background:white;background-color: rgba(255,255,255,255);border: none;color:#FFA500") self.Text.setFixedSize(85, 30) self.layout.addWidget(self.Text, 5, 0, Qt.AlignRight) self.addressText = QLineEdit(self) self.addressText.setFixedSize(210, 25) self.addressText.setStyleSheet( "font-size:16px;font-weight:500;background-color: rgba(255,255,255,180);border: none;color:#55007f") self.layout.addWidget(self.addressText, 5, 1, Qt.AlignLeft) self.startPushButton = QPushButton("开始查询") self.startPushButton.setFixedSize(70, 60) self.startPushButton.clicked.connect(self.check) self.layout.addWidget(self.startPushButton, 3, 2, 2, 2, Qt.AlignRight) def check(self): idcard = self.idcardText.text() verification = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] sum = 0 for i, j in zip(list(idcard)[0:18], verification): sum += int(i) * j final_dic = {0: 1, 1: 0, 2: 'X', 3: 9, 4: 8, 5: 7, 6: 6, 7: 5, 8: 4, 9: 3, 10: 2} if str(final_dic[sum % 11]) == str(idcard[17]): self.resultText.setText('验证成功,身份证有效') else: self.resultText.setText('验证失败,身份证无效') gender_id = {'0': '女', '1': '男'} gender = gender_id[str(int(idcard[16]) % 2)] age = int(datetime.datetime.now().year) - int(idcard[6:10]) address = data[data['身份证前六位'].eq(idcard[:6])]['所属地区'] self.genderText.setText(gender) self.ageText.setText(str(age)) self.addressText.setText(str(address.values[0])) def closeEvent(self, event): reply = QMessageBox.question(self, 'Message', "是否确认退出?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)if reply == QMessageBox.Yes: event.accept()else: event.ignore() app = QApplication(sys.argv) show = Window() #主窗口的类 palette = QPalette() palette.setBrush(QPalette.Background, QBrush(QPixmap("bg.jpg"))) show.setFixedSize(500, 250) show.setPalette(palette) show.show() sys.exit(app.exec_())

测试截图:

python身份证升位 python身份证号码归属地查询_校验码_08

python身份证升位 python身份证号码归属地查询_Qt_09



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3