人工智能的兴起,最近这段时间碰到很多开发工程师咨询Python语言二次开发使用身份证阅读器的问题,这次特增加了Python语言的demo,供大家参考使用。

先上Python界面的读取效果图:

1、说明:
appMain.py为程序主文件,运行工程源程序必须安装python3+PyQt5运行环境,依赖库dll必须与源程序同一路径。

2、命令行中执行:
python3 appMain.py

3、Python调用用到的文件有:
est64.dl、DLL_File.dll、license.dat,这都是厂家提供的身份证读卡器的标准库文件。

4、调试用的读卡器
广东东信智能科技有限公司出品:EST-100GS第三代身份证读卡器

话不多说,直接上Python的源码。

#-*- coding : utf-8-*-
# 本Python读取身份证信息的demo支持的型号有:EST-100、EST-100GS、EST-100G、EST-100U、EST-200G、EST-J13X等系列身份证社保卡读卡器。
# 广东东信智能科技有限公司 www.eastcoms.com版权所有。import sys
from ctypes import *id_dev_name = b"USB1"
dll_path = './est64.dll'
id_image_path = './zp.bmp'pBmpFile =  c_char_p(b'/0'*100)
#pFingerData =  c_char_p(b'/0'*1025)
#pBmpData =  c_char_p(b'/0'*77725)
#pBase64Data = c_char_p(b'/0'*6025)
pName = c_char_p(b'/0'*100)
pSex = c_char_p(b'/0'*100)
pNation = c_char_p(b'/0'*100)
pBirth = c_char_p(b'/0'*100)
pAddress = c_char_p(b'/0'*100)
pCertNo = c_char_p(b'/0'*100)
pDepartment = c_char_p(b'/0'*100)
pEffectData = c_char_p(b'/0'*100)
pExpire = c_char_p(b'/0'*100)
pData = c_char_p(b'/0'*100)
pErrMsg = c_char_p(b'/0'*100)
pTXZHM = c_char_p(b'/0'*100)
pTXZQFCS = c_char_p(b'/0'*100)pEnName = c_char_p(b'/0'*200)
pEnNation = c_char_p(b'/0'*100)
pAuthorCode = c_char_p(b'/0'*100)
pCardVersion = c_char_p(b'/0'*100)pErrMsg = c_char_p(b'/0'*100)class idreader(object):def __init__(self, parent=None):self.dev_name = c_char_p(id_dev_name)self.id_dev = CDLL(dll_path)self.id_handle = self.id_dev.EU_Reader_Open(self.dev_name)def get_msg(self):global pBmpFile,pName,pSex,\pNation,pBirth,pAddress,pCertNo,pDepartment,pEffectData,\pExpire,pData,pErrMsg,pTXZHM,pTXZQFCS,pEnName,pEnNation,\pAuthorCode,pCardVersion#pFingerData,pBmpData,pBase64Data,pBmpFile.value = bytes(id_image_path,encoding="utf8")        id_msg_str = ""        self.id_handle = self.id_dev.EU_Reader_Open(self.dev_name)if self.id_handle <= 0:print('reader port open failure.')return (self.id_handle,)sUID = c_char_p(b'/0'*30)    self.id_dev.PEU_Reader_ID_ReadUID(self.id_handle, sUID)                ret = self.id_dev.PEU_Reader_ReadIDCard(self.id_handle, pErrMsg)if ret == 0:idcardType = int(-1)idcardType = self.id_dev.GetCardType()if idcardType == 0:id_msg_str = "证件类型:居民身份证" + "\r\n"self.id_dev.GetName(pName)id_msg_str += "姓名:" + str(pName.value,encoding='gbk') + "\r\n"                self.id_dev.GetSex(pSex)id_msg_str += "性别:" + str(pSex.value,encoding='gbk') + "\r\n"                self.id_dev.GetNation(pNation)id_msg_str += "民族:" + str(pNation.value,encoding='gbk') + "\r\n"                self.id_dev.GetBirth(pBirth)id_msg_str += "出生日期:" + str(pBirth.value,encoding='gbk') + "\r\n"                self.id_dev.GetAddress(pAddress)id_msg_str += "住址:" + str(pAddress.value,encoding='gbk').strip() + "\r\n"                self.id_dev.GetCertNo(pCertNo)id_msg_str += "身份证号码:" + str(pCertNo.value,encoding='gbk') + "\r\n"                self.id_dev.GetDepartemt(pDepartment)id_msg_str += "签发机关:" + str(pDepartment.value,encoding='gbk') + "\r\n"              self.id_dev.GetEffectDate(pEffectData)id_msg_str += "有效起始日期:" + str(pEffectData.value,encoding='gbk') + "\r\n"                self.id_dev.GetExpireDate(pExpire)id_msg_str += "有效截止日期:" + str(pExpire.value,encoding='gbk') + "\r\n"elif idcardType == 1:   id_msg_str = "证件类型:外国人永久居留证" + "\r\n"self.id_dev.GetName(pName)id_msg_str += "中文姓名:" + str(pName.value,encoding='gbk') + "\r\n"self.id_dev.GetEnName(pEnName)id_msg_str += "英文姓名:" + str(pEnName.value,encoding='gbk')                self.id_dev.GetSex(pSex)id_msg_str += "性别:" + str(pSex.value,encoding='gbk')                self.id_dev.GetNationalityCode(pEnNation) id_msg_str += "国籍代码:" + str(pEnNation.value,encoding='gbk') + "\r\n"                self.id_dev.GetBirth(pBirth)id_msg_str += "出生日期:" + str(pBirth.value,encoding='gbk') + "\r\n"                self.id_dev.GetCertNo(pCertNo) id_msg_str += "永久证号码:" + str(pCertNo.value,encoding='gbk') + "\r\n"self.id_dev.GetEffectDate(pEffectData)id_msg_str += "有效起始日期:" + str(pEffectData.value,encoding='gbk') + "\r\n"self.id_dev.GetExpireDate(pExpire)id_msg_str += "有效截止日期:" + str(pExpire.value,encoding='gbk') + "\r\n"elif idcardType == 2:id_msg_str = "证件类型:港澳台居民居住证" + "\r\n"self.id_dev.GetName(pName)id_msg_str += "姓名:" + str(pName.value,encoding='gbk') + "\r\n"self.id_dev.GetSex(pSex)id_msg_str += "性别:" + str(pSex.value,encoding='gbk') + "\r\n"self.id_dev.GetBirth(pBirth)id_msg_str += "出生日期:" + str(pBirth.value,encoding='gbk') + "\r\n"self.id_dev.GetCertNo(pCertNo)id_msg_str += "身份证号码:" + str(pCertNo.value,encoding='gbk') + "\r\n"self.id_dev.GetAddress(pAddress)id_msg_str += "住址:" + str(pAddress.value,encoding='gbk').strip() + "\r\n"self.id_dev.GetDepartemt(pDepartment)id_msg_str += "签发机关:" + str(pDepartment.value,encoding='gbk') + "\r\n"self.id_dev.GetEffectDate(pEffectData)id_msg_str += "有效起始日期:" + str(pEffectData.value,encoding='gbk') + "\r\n"self.id_dev.GetExpireDate(pExpire)id_msg_str += "有效截止日期:" + str(pExpire.value,encoding='gbk') + "\r\n"self.id_dev.GetTXZHM(pTXZHM)id_msg_str += "通行证号码:" + str(pTXZHM.value,encoding='gbk') + "\r\n"self.id_dev.GetTXZQFCS(pTXZQFCS)id_msg_str += "通行证签发次数:" + str(pTXZQFCS.value,encoding='gbk') + "\r\n"else:print("id card read failure.")return  (idcardType,)img = self.id_dev.GetBmpFile(pBmpFile);self.id_dev.EU_PosBeep(self.id_handle, 0x30);            return (ret,id_msg_str,img,id_image_path)else:print('PEU_Reader_ReadIDCard error.')return (ret,)def get_uid(self):uid_pstr = c_char_p(b'/0'*20)self.id_handle = self.id_dev.EU_Reader_Open(self.dev_name)ret = self.id_dev.PEU_Reader_ID_ReadUID(self.id_handle,uid_pstr)if ret == 0:self.id_dev.EU_PosBeep(self.id_handle, 0x30);uid_str = str(uid_pstr.value,encoding='utf-8')return (ret,uid_str)if  __name__ == "__main__":      idcard = idreader()uid=idcard.get_uid()print('id card uid=')print(uid)id_msg = idcard.get_msg()print('id card message:')print(id_msg)

分享:用Python语言轻松实现二代身份证阅读器(读卡器)自动读卡,支持定制开发相关推荐

  1. 神思二代身份证阅读器集成WEB实例文档js及说明

    神思二代身份证阅读器使用说明 --By wuhebin 20180705 1.      硬件说明:神思SS628(100)台式二代身份证阅读器 2.    神思阅读器仅支持IE浏览器或者兼容IE浏览 ...

  2. 二代身份证阅读器 C#、JAVA调用教程

    型号:普天CPIDMR02/TG身份证阅读器 SDK版本:2020 (我这不提供下载,自己咨询卖家,或者网上自己找,SDK 厂家不二次封装的机器理论通用) 新老版本区别: 多了外国人永久居留身份证.港 ...

  3. Kotlin之身份证阅读器(华视)二次开发

    一.简介 身份证阅读器使用场景比较多,围绕它按照自己的需求进行二次开发的也不少,我这次也是围绕身份证阅读器进行二次开发,不过使用的是kotlin作为开发的语言,资料比较少,参考了java的开发设计JA ...

  4. 二代身份证阅读器(XZX)

    问题一 解决方法: 通常我把所有的dll复制到system32文件夹,64位系统复制到sysWOW64文件夹,而且编译选项CPU要选择X86 问题二 解决方法: 图片路径默认是C:\,对C:\没有写的 ...

  5. delphi 二代身份证阅读器开发 SDT_ReadBaseMsg函数

    C++中函数原型: STDAPI_API int WINAPI SDT_ReadBaseMsg( int iPort, unsigned char * pucCHMsg, unsigned int * ...

  6. delphi 二代身份证阅读器 SDT_ReadBaseMsg()读取到的照片数据进行处理问题

    SDT_ReadBaseMsg(1001,@pucCHMsg,puiCHMsgLen,@pucPHMsg,puiPHMsgLen,1);//获取读卡数据  pucCHMsg 文字信息(unicode编 ...

  7. 华旭金卡js调用身份证阅读器和易联众社保卡阅读器

    近期公司做身份证读卡器(华旭金卡的产品)和社保卡读卡器(易联众的产品)功能,识别后进行相应人员的参保信息查询.可算是长知识了,弄了整整两天.今天就总结一下,因为在华旭金卡的官网上只有c,pb,vb的D ...

  8. C#如何读取身份证阅读器

    不同的身份证读卡器,其动态库不一样,新中新二代身份证阅读器,型号:DKQ-A16D,eg: using System; using System.Collections.Generic; using  ...

  9. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

最新文章

  1. 3D视觉检测的未来:光度立体技术
  2. 摩卡签约印尼五大运营商之一CSM,进军东南亚市场
  3. linux下多进程编程简介
  4. linux /etc/rc.d/目录的详解
  5. 深圳内推 | 腾讯IEG互动娱乐事业群招聘算法工程师、数据研究员(可实习)
  6. 机器学习基础-多项式回归-03
  7. Objective-C Runtime 运行时之五:协议与分类
  8. UIlabel 显示模糊
  9. config userc.php,框架内置Config.php配置
  10. 蓝桥杯 ADV-61 算法提高 矩阵乘方
  11. 四个措施打造安全的DevOps流程
  12. 【bug】VUE:Cannot read property '_withTask' of undefined
  13. jquery中css()与animate()
  14. python猴子分桃问题_阶乘
  15. 2019二级建造师-法规-基础班-精讲班课程更新进度
  16. 新版标准日本语初级_第三十七课
  17. English--七种句子成分概述
  18. UBT3:ubuntu安装Typora
  19. 2020-2021 年度广东省职业院校技能大赛网络搭建与应用竞赛
  20. 安卓手机主题软件_安卓手机直播软件:绝影Live

热门文章

  1. java.lang.IllegalArgumentException: Failed to decrypt.
  2. 股票配对交易策略-最小距离法
  3. oracle实时异地同步,异地Oracle数据库数据同步
  4. 多伦多ajax小镇,加拿大人口普查数据公布:多伦多都市区人口600万
  5. 华为云服务器数据库连接失败
  6. 2021年小米校招java编程题
  7. BeamSearch(集束算法)
  8. 记一次完整的用户测试
  9. Certificate 超详细解析cer证书(序列号,颁发者,公钥等)
  10. MAXENT模型生物多样性