一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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

 O聽_海_軒O 2020-03-18

162345_1vA6_1415860.png

發(fā)現(xiàn)酒店、網(wǎng)吧、公家單位好多都是使用的這種藍(lán)色的身份證讀取盒子,所以我研究了一下也寫個(gè)Python示例

網(wǎng)上搜了搜關(guān)于這款機(jī)器的SDK,基本上全是C#的帖子

首先,先安裝他們的驅(qū)動(dòng),我使用的是USB驅(qū)動(dòng),在他們官網(wǎng)上下載了動(dòng)態(tài)鏈接庫,實(shí)際上就是使用SynIDCardAPI.dll這個(gè)庫。

下面,我們來調(diào)用一下他們提供的接口(接口文檔就不提供了,可以去他們官網(wǎng)下載后觀摩),下面是我的Python代碼:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import ctypes, sys, re
  4. from ctypes import * #因?yàn)槭褂玫氖荂/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) #這一步很重要,他們默認(rèn)把身份證頭像存在了C盤根目錄,導(dǎo)致win7下面調(diào)用會(huì)導(dǎo)致python崩潰,原因是沒有管理員權(quán)限,這里1參數(shù)可以換到當(dāng)前目錄即可
  13. #下面調(diào)用他們的最終讀取函數(shù)Syn_ReadMsg,第三個(gè)參數(shù)是一個(gè)結(jié)構(gòu)體,Python本身沒有C/C++那樣的結(jié)構(gòu)體,但是可以通過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), #身份證號(hào)
  22. ('GrantDept', c_char * 32), #發(fā)證機(jī)關(guān)
  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"

說實(shí)話,他們的接口壓根就沒有考慮什么PHP、Python這類語言,一點(diǎn)都不方便,給C#卻提供了很多示例,真心操蛋!

留帖為了方便我以后查看,也給學(xué)習(xí)Python的童鞋們一個(gè)希望,讀取身份證類似的C/S架構(gòu)軟件也可以使用wxPython進(jìn)行開發(fā)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    手机在线不卡国产视频| 欧美六区视频在线观看| 欧美加勒比一区二区三区| 91插插插外国一区二区婷婷| 日韩一本不卡在线观看| 日韩人妻欧美一区二区久久| 亚洲精品国产精品日韩| 国产91麻豆精品成人区| 高潮少妇高潮久久精品99| 久久青青草原中文字幕| 九九热九九热九九热九九热| 精品丝袜一区二区三区性色| 亚洲内射人妻一区二区| 欧美日韩精品久久第一页| 色好吊视频这里只有精| 日本av一区二区不卡| 久久婷婷综合色拍亚洲| 男女午夜福利院在线观看| 久久精品亚洲情色欧美| 国产精品国产亚洲看不卡| 久久国产精品熟女一区二区三区| 四季av一区二区播放| 精品少妇人妻av一区二区蜜桃 | 91麻豆精品欧美一区| 国产视频福利一区二区| 中文字幕久热精品视频在线| 丰满少妇被猛烈撞击在线视频 | 日本一区不卡在线观看| 日韩av欧美中文字幕| 婷婷激情四射在线观看视频| 98精品永久免费视频| 少妇在线一区二区三区| 国产精品香蕉在线的人| 成人三级视频在线观看不卡 | 中文字幕乱码亚洲三区| 国产性色精品福利在线观看| 亚洲国产中文字幕在线观看| 国产精品亚洲二区三区| 这里只有九九热精品视频| 色综合久久中文综合网| 日本办公室三级在线观看|