combobox 怎么实现对listview的类别查询_周末带大家写个身份证信息查询小工具呀~...

fdfab9f6835ed9986b6111660409bd86.png

原文链接

周末带大家写个身份证信息查询小工具呀~​mp.weixin.qq.com
80a5669b51e4d3e1a2dea88bf91ce262.png

导语

周末少躺会,早点起来给大家再更新一篇水文吧。

62f19f1e49fb35492a4a3a850f9d9203.png

昨天发现一个身份证信息查询的py包,感觉还算有点意思,于是过来分享一波,带大家用pyqt5写个身份证信息查询小工具,这个小工具大概包括以下两个功能吧:

  • 验证输入的身份证号是否合法,如果合法则解析身份证号里包含的信息(地址,出生日期,性别,生肖等等);
  • 根据输入信息(出生日期等)生成一个假的身份证号。

废话不多说,让我们愉快地开始吧~

开发工具

Python版本:3.6.4
相关模块:
PyQt5模块;
id-validator模块;
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

原理其实蛮简单的,主要是借助id-validator这个第三方包来实现我们想要的功能。

首先pip安装一下:

pip install id-validator

接着,验证身份证号是否合法的话只需要这样做:

from id_validator import validator

validator.is_valid('8ddd00199408230021')

获取身份证号信息的话只需要这样做:

validator.get_info('8ddd00199408230021')

生成假的数据只需要这样子:

validator.fake_id(True, 出生地区, 出生日期, 性别)

62f19f1e49fb35492a4a3a850f9d9203.png

做个无情的调包机器人就ok了,不需要什么脑子。其实实现的原理也很简单,因为18位身份证号的构成是这样子的:

地址码:前6位, 比如北京的地址码是110000
出生日期码: 第7到14位, 比如20001001
顺序码: 第15到17位, 解释参见https://zhuanlan.zhihu.com/p/21286417
校验码: 第18位, 计算方式参见https://zhuanlan.zhihu.com/p/21286417

所以自己查点资料然后写个包实现上面那个包有的功能其实并不难,感兴趣的小伙伴可以自己试试。

接着,我们用PyQt封装一下上面的功能:

b5388926841be5d9f28ca045662fe66a.png

点击随机生成按钮会在身份证号栏的输入框中随机生成一个可以通过校验的身份证号。查询结果用来查看身份证号是否合法,以及如果合法的话,该身份证号所包含的信息的解析结果。

具体而言,核心代码如下:

'''验证并解析身份证号信息'''
def CheckAndParseID(self):
    id_ = self.idcard_line_edit.text()
    is_valid = validator.is_valid(id_)
    if not is_valid:
        self.result_text_edit.setText('身份证号是否合法: 否n身份证号信息: 无')
        return
    showinfo = '身份证号是否合法: 是n'
    idinfos = validator.get_info(id_)
    key_to_showtext = {
        'address_code': '地址码',
        'abandoned': '地址码是否废弃(1是废弃, 0是仍在使用)',
        'address': '地址',
        'birthday_code': '出生日期',
        'constellation': '星座',
        'chinese_zodiac': '生肖',
        'sex': '性别',
    }
    for key, value in idinfos.items():
        if key not in key_to_showtext: continue
        showinfo += f'{key_to_showtext[key]}: {value}n'
    self.result_text_edit.setText(showinfo)

'''生成假的身份证号'''
def generateID(self):
    birthday = self.birthday_line_edit.text().replace('-', '')
    birthday = birthday if birthday else None
    address = self.address_line_edit.text()
    address = address if address else None
    sex = self.sex_combobox.currentText()
    sex = 1 if sex == '男' else 0
    try:
        id_ = validator.fake_id(True, address, birthday, sex)
    except:
        id_ = validator.fake_id()
    self.idcard_line_edit.setText(id_)

大功告成~完整源代码详见相关文件呗。

效果展示

在终端运行如下命令即可:

python idcardquer.py

效果如下:

知乎视频​www.zhihu.com

相关文件

https://github.com/CharlesPikachu/Tools

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值