打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
新中新a16d二代居民身份证阅读器Python示例

发现酒店、网吧、公家单位好多都是使用的这种蓝色的身份证读取盒子,所以我研究了一下也写个Python示例

网上搜了搜关于这款机器的SDK,基本上全是C#的帖子

首先,先安装他们的驱动,我使用的是USB驱动,在他们官网上下载了动态链接库,实际上就是使用SynIDCardAPI.dll这个库。

下面,我们来调用一下他们提供的接口(接口文档就不提供了,可以去他们官网下载后观摩),下面是我的Python代码:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import ctypes, sys, re
  4. from ctypes import * #因为使用的是C/C++的库,所以我们引用ctypes
  5. dll = ctypes.windll.LoadLibrary("SynIDCardAPI.dll") #载入库
  6. iPort = dll.Syn_FindUSBReader() #寻找USB,返回的貌似是什么端口
  7. pucIIN = ctypes.create_string_buffer(128)
  8. dll.Syn_StartFindIDCard(iPort, pucIIN, 1) #开始找卡
  9. pucSN = ctypes.create_string_buffer(128)
  10. dll.Syn_SelectIDCard(iPort, pucSN, 1) #选择卡
  11. cPhotopath = ctypes.create_string_buffer(255)
  12. dll.Syn_SetPhotoPath(1, cPhotopath) #这一步很重要,他们默认把身份证头像存在了C盘根目录,导致win7下面调用会导致python崩溃,原因是没有管理员权限,这里1参数可以换到当前目录即可
  13. #下面调用他们的最终读取函数Syn_ReadMsg,第三个参数是一个结构体,Python本身没有C/C++那样的结构体,但是可以通过ctypes的Structure来解决
  14. class IDCardData(Structure):
  15. _fields_ = [
  16. ('Name', c_char * 32), #姓名
  17. ('Sex', c_char * 6), #性别
  18. ('Nation', c_char * 20), #民族
  19. ('Born', c_char * 18), #出生日期
  20. ('Address', c_char * 72), #住址
  21. ('IDCardNo', c_char * 38), #身份证号
  22. ('GrantDept', c_char * 32), #发证机关
  23. ('UserLifeBegin', c_char * 18), #有效开始日期
  24. ('UserLifeEnd', c_char * 18), #有效截止日期
  25. ('reserved', c_char * 38), #保留
  26. ('PhotoFileName', c_char * 255) #照片路径
  27. ]
  28. data = IDCardData()
  29. r = dll.Syn_ReadMsg(iPort, 1, byref(data))
  30. if r == 0:
  31. reserved = (getattr(data, 'reserved') if getattr(data, 'reserved') != '' else 'None')
  32. result = getattr(data, 'Name') + "||" + getattr(data, 'Sex') + "||" + getattr(data, 'Nation') + "||" + getattr(data, 'Born') + "||" + getattr(data, 'Address') + "||" + getattr(data, 'IDCardNo') + "||" + getattr(data, 'GrantDept') + "||" + getattr(data, 'UserLifeBegin') + "||" + getattr(data, 'UserLifeEnd') + "||" + reserved + "||" + getattr(data, 'PhotoFileName')
  33. result = result.decode('gbk').encode('utf8')
  34. print result #这里就返回的是身份证信息,我这里以双竖线分隔拼成字符串了
  35. else:
  36. print "None"

说实话,他们的接口压根就没有考虑什么PHP、Python这类语言,一点都不方便,给C#却提供了很多示例,真心操蛋!

留帖为了方便我以后查看,也给学习Python的童鞋们一个希望,读取身份证类似的C/S架构软件也可以使用wxPython进行开发。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python调用windows下DLL详解 - ctypes库的使用
Python:使用ctypes库调用外部DLL
Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数
Python量化接口源码分享
Python的学习(三十二)
Python调用windows下DLL详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服