利用Python对非接触式IC卡的读写操作

利⽤Python对⾮接触式IC卡的读写操作
这两年Python这门开发语⾔⽕遍了⼤江南北,处处可以看到关于学习Python的⼴告。在平时了解客户需求过程中也接触到了很多开
发者正在准备使⽤Python来开发智能卡读写的相关功能,这⾥我们就不去追究为何有如此多的⽤户利⽤Python这门开发语⾔来实现智能卡
读写操作的原因了。总之,有客户需求我们就应该积极响应。
关于Python集成开发环境这些过程我们就不⼀⼀赘述了,我相信各位使⽤Python的开发者对这些基础操作都⽐较熟悉。我们主要是介绍
⼀下在LotusCardDriver.dll 这个动态链接库⾥⾯已经是⽀持了⾮接触式IC卡,CPU卡、社保卡,居民健康卡,⼆代证等多种功能,如何利
⽤Python这个开发语⾔来实现这些功能?平时接触到的⽤户⼤多数是使⽤C#、java这类开发语⾔实现对⾮接触式IC卡,CPU卡、社保卡的
阅读,⽤Python的近两年来开始多起来了。
⾸先,说明⼀下LotusCardDriver.dll 这个动态链接库有32位和64位版本,这⾥介绍64位版本的开发过程。⾸先,我们定义⼀个结构
体,我喜欢这么称呼他,你们也可以⽤其他称呼。
import os
class LotusCardParamStruct(Structure):
_fields_ = [ ("nCardType", c_int),
("arrCardNo", c_ubyte * 8),
("nCardSize",c_int) ,
("arrBuffer", c_ubyte * 64),
("nBufferSize", c_int),
("arrKeys", c_ubyte * 64),
("nKeysSize", c_int),
("arrCosResultBuffer", c_ubyte * 256),
("unCosReultBufferLength", c_int),
("arrCosSendBuffer", c_ubyte * 256),
("unCosSendBufferLength", c_int)]
wd()+"\LotusCardDriver.dll")
导⼊LotusCardDriver.dll 动态链接库,注意,要导⼊64位的动态链接库。
#Objdll = windll.LoadLibrary("LotusCardDriver.dll")
Objdll = windll.wd()+"\LotusCardDriver.dll")
sttLotusCardParam = LotusCardParamStruct()
#int _stdcall LotusCardOpenDevice(char * pszDeviceName, int nVID, int nPID, LotusCardExtendReadWriteCallBack  pLotusCardExtendReadWriteCallBack);
#LotusHandle WINAPI LotusCardOpenDevice(char * pszDeviceName, int nVID, int nPID, int nUsbDeviceIndex, unsigned int unRecvTimeOut, LotusCardExtendRe 如果采⽤的是⽀持⽹络TCP/IP通信的智能卡读写器,还需要输⼊读卡器IP地址,这个地址可以通过⼯具进⾏⾃定义配置。
#strServerIp = '192.168.1.252'
strServerIp = ''
如果采⽤的USB免驱或者RS232通信接⼝的智能卡读写器,这⼀步骤可以省略。
接下来是对⾮接触式IC卡和⼆代证阅读的范例了
stype = c_longlong
Objdll.LotusCardGetCardNo.argtypes = [c_longlong, c_int,c_void_p]
Objdll.LotusCardLoadKey.argtypes = [c_longlong, c_int,c_int, c_void_p]
Objdll.LotusCardAuthentication.argtypes = [c_longlong, c_int,c_int, c_void_p]
Objdll.LotusCardRead.argtypes = [c_longlong, c_int, c_void_p]
Objdll.LotusCardWrite.argtypes = [c_longlong, c_int, c_void_p]
Objdll.LotusCardCloseDevice.argtypes = [c_longlong]
Objdll.LotusCardSetCardType.argtypes = [c_longlong,c_byte]
Objdll.LotusCardGetTwoGenerationIDCardNo.argtypes = [c_longlong,c_char_p,c_int]
hLotusCard = Objdll.de('gb2312'),0,0,0,2000,0)
print(hLotusCard)
RT_ALL = 0x52
遥控机器人
RT_NOT_HALT = 0x26
RT_NOT_HALT = 0x26
AM_A = 0x60
AM_B = 0x61
szTwoGenerationID =  bytes(64)
nRequestType = RT_NOT_HALT
bResult = 0
#input("wait input")
if -1 != hLotusCard:
'''
bResult = Objdll.LotusCardSetCardType(hLotusCard,0x42)
if 1==bResult:
print("LotusCardSetCardType OK")
else:
print("LotusCardSetCardType Error")
bResult = Objdll.LotusCardGetTwoGenerationIDCardNo(hLotusCard,szTwoGenerationID, 64)
if 1==bResult:
print("LotusCardGetTwoGenerationIDCardNo OK %s" %(szTwoGenerationID))
print(str(szTwoGenerationID, encoding="utf-8"))
else:
print("LotusCardGetTwoGenerationIDCardNo Error")
exit()
exit()
'''
bResult = Objdll.LotusCardGetCardNo(hLotusCard,nRequestType, byref(sttLotusCardParam))
if 1==bResult:
#print(sttLotusCardParam.arrCardNo)
print("%d" %(len(sttLotusCardParam.arrCardNo)))
#print("CardNo(HEX) %.2x%.2x%.2x%.2x" %(sttLotusCardParam.arrCardNo[0],sttLotusCardParam.arrCardNo[1],sttLotusCardParam.arrCardNo[2],sttLotusC        print("CardNo(HEX) %.2X%.2X%.2X%.2X" %(sttLotusCardParam.arrCardNo[0],sttLotusCardParam.arrCardNo[1],sttLotusCardParam.arrCardNo[2],sttLotusC        print("CardNo(HEX) %.2X%.2X%.2X%.2X" %(sttLotusCardParam.arrCardNo[3],sttLotusCardParam.arrCardNo[2],sttLotusCardParam.arrCardNo[1],sttLotusC    else:
print("LotusCardGetCardNo Error")
if 1==bResult:
#sttLotusCardParam.arrKeys = "\xff\xff\xff\xff\xff\xff"
sttLotusCardParam.arrKeys[0] = 0xff
sttLotusCardParam.arrKeys[1] = 0xff
sttLotusCardParam.arrKeys[2] = 0xff
sttLotusCardParam.arrKeys[3] = 0xff
sttLotusCardParam.arrKeys[4] = 0xff
sttLotusCardParam.arrKeys[5] = 0xff
bResult =Objdll.LotusCardLoadKey(hLotusCard, AM_A, 0, byref(sttLotusCardParam))
if 1==bResult:
print("LotusCardLoadKey OK")
else:
print("LotusCardLoadKey Error")
if 1==bResult:
bResult =Objdll.LotusCardAuthentication(hLotusCard, AM_A, 0, byref(sttLotusCardParam))
if 1==bResult:
封边机青岛金鼎机械
print("LotusCardAuthentication OK")
else:
print("LotusCardAuthentication Error")
'''
if 1==bResult:
bResult =Objdll.LotusCardRead(hLotusCard, 2, byref(sttLotusCardParam))动物胶配方整个过程
if 1==bResult:
print("LotusCardRead OK")
#print(sttLotusCardParam.arrBuffer)
print("ReadData(HEX):%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x" %(sttLotusCardParam.arrBuffer[0],sttLotusCardParam            sttLotusCardParam.arrBuffer[4],sttLotusCardParam.arrBuffer[5],sttLotusCardParam.arrBuffer[6],sttLotusCardParam.arrBuffer[7],
sttLotusCardParam.arrBuffer[8],sttLotusCardParam.arrBuffer[9],sttLotusCardParam.arrBuffer[10],sttLotusCardParam.arrBuffer[11],
sttLotusCardParam.arrBuffer[12],sttLotusCardParam.arrBuffer[13],sttLotusCardParam.arrBuffer[14],sttLotusCardParam.arrBuffer[15]))
else:
print("LotusCardRead Error")
'''
if 1==bResult:
if 1==bResult:
sttLotusCardParam.arrBuffer[0] = 0x00
sttLotusCardParam.arrBuffer[1] = 0x01
卷染机sttLotusCardParam.arrBuffer[2] = 0x02
sttLotusCardParam.arrBuffer[3] = 0x03
sttLotusCardParam.arrBuffer[4] = 0x04
sttLotusCardParam.arrBuffer[5] = 0x05
包装盒fonmoo
sttLotusCardParam.arrBuffer[6] = 0x06
sttLotusCardParam.arrBuffer[7] = 0x07
sttLotusCardParam.arrBuffer[8] = 0x08
sttLotusCardParam.arrBuffer[9] = 0x09
sttLotusCardParam.arrBuffer[10] = 0x0A
sttLotusCardParam.arrBuffer[11] = 0x0B
sttLotusCardParam.arrBuffer[12] = 0x0C
sttLotusCardParam.arrBuffer[13] = 0x0D
sttLotusCardParam.arrBuffer[14] = 0x0E
sttLotusCardParam.arrBuffer[15] = 0x0F
sttLotusCardParam.nBufferSize = 16
bResult =Objdll.LotusCardWrite(hLotusCard, 2, byref(sttLotusCardParam))
if 1==bResult:
print("LotusCardWrite OK")
else:
print("LotusCardWrite Error")
Objdll.LotusCardCloseDevice(hLotusCard)
else:
print("LotusCardOpenDevice ERROR")
print(bResult)
磁带备份下载链接中有详细代码,可以供参考和学习。由于时间匆忙,有遗漏和不⾜之处还请谅解。

本文发布于:2024-09-24 15:24:17,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/213662.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:过程   开发   操作   需求   链接
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议