新中新a16d二代居民身份證閱讀器Python示例

發現酒店、網吧、公家單位好多都是使用的這種藍色的身份證讀取盒子,因此我研究了一下也寫個Python示例python

網上搜了搜關於這款機器的SDK,基本上全是C#的帖子架構

首先,先安裝他們的驅動,我使用的是USB驅動,在他們官網上下載了動態連接庫,實際上就是使用SynIDCardAPI.dll這個庫。函數

下面,咱們來調用一下他們提供的接口(接口文檔就不提供了,能夠去他們官網下載後觀摩),下面是個人Python代碼:學習

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import ctypes, sys, re
from ctypes import * #由於使用的是C/C++的庫,因此咱們引用ctypes

dll = ctypes.windll.LoadLibrary("SynIDCardAPI.dll") #載入庫

iPort = dll.Syn_FindUSBReader() #尋找USB,返回的貌似是什麼端口


pucIIN = ctypes.create_string_buffer(128)
dll.Syn_StartFindIDCard(iPort, pucIIN, 1) #開始找卡

pucSN = ctypes.create_string_buffer(128)
dll.Syn_SelectIDCard(iPort, pucSN, 1) #選擇卡


cPhotopath = ctypes.create_string_buffer(255)
dll.Syn_SetPhotoPath(1, cPhotopath) #這一步很重要,他們默認把身份證頭像存在了C盤根目錄,致使win7下面調用會致使python崩潰,緣由是沒有管理員權限,這裏1參數能夠換到當前目錄便可


#下面調用他們的最終讀取函數Syn_ReadMsg,第三個參數是一個結構體,Python自己沒有C/C++那樣的結構體,可是能夠經過ctypes的Structure來解決
class IDCardData(Structure):
    _fields_ = [
		('Name', c_char * 32), #姓名
		('Sex', c_char * 6), #性別
		('Nation', c_char * 20), #民族
		('Born', c_char * 18), #出生日期
		('Address', c_char * 72), #住址
		('IDCardNo', c_char * 38), #身份證號
		('GrantDept', c_char * 32), #發證機關
		('UserLifeBegin', c_char * 18), #有效開始日期
		('UserLifeEnd', c_char * 18), #有效截止日期
		('reserved', c_char * 38), #保留
		('PhotoFileName', c_char * 255) #照片路徑
	]
data = IDCardData()
r = dll.Syn_ReadMsg(iPort, 1, byref(data))
if r == 0:
	reserved = (getattr(data, 'reserved') if getattr(data, 'reserved') != '' else 'None')
	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')
	result = result.decode('gbk').encode('utf8')
	print result #這裏就返回的是身份證信息,我這裏以雙豎線分隔拼成字符串了
else:
	print "None"

 

說實話,他們的接口壓根就沒有考慮什麼PHP、Python這類語言,一點都不方便,給C#卻提供了不少示例,真心操蛋!code

留帖爲了方便我之後查看,也給學習Python的童鞋們一個但願,讀取身份證相似的C/S架構軟件也能夠使用wxPython進行開發。接口

相關文章
相關標籤/搜索