#!/usr/bin/env python
# -*- coding: utf-8 -*-
import ctypes #调用DLL动态库要有这个引用
import sys
import os
#加载当前目录下的DLL
dllfile=sys.path[0]+'\OUR_IDR_x64.dll'
Objdll = ctypes.windll.LoadLibrary(dllfile)
Objdll = ctypes.WinDLL(dllfile)
#根据入口参数执行不同功能
if(len(sys.argv)>1):
if(str(sys.argv[1])=='0'): #驱动读写器发出响声
Objdll.idr_beep(50)
elif(str(sys.argv[1])=='1'): #读取设备的出厂编号
devno=bytes([0,0,0,0]) #声明4个字节缓冲
status=Objdll.pcdgetdevicenumber(devno)
if(status==0):
Objdll.idr_beep(38)
SerialNum=''
for num in range(0,len(devno)):
SerialNum=SerialNum+'%02x' % (devno[num])
if(num<len(devno)-1):
SerialNum=SerialNum+'-'
print('设备出厂编号:'+ SerialNum)
else:
print('读取设备编号失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='2'): #可多次读取卡号
idserial=bytes([0,0,0,0,0])
status =Objdll.idr_read(idserial)
if(status==0):
Objdll.idr_beep(38)
print('16进制卡号:%02x%02x%02x%02x%02x' % (idserial[0],idserial[1],idserial[2],idserial[3],idserial[4]))
Cardno=idserial[4]
Cardno=Cardno+(idserial[3]*256)
Cardno=Cardno+(idserial[2]*65536)
Cardno=Cardno+(idserial[1]*16777216)
CardnoStr='%010d' % Cardno
print('10进制卡号:'+CardnoStr)
elif(status==8):
print('请将卡放在读卡器的感应区')
else:
print('读卡失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='3'): #仅读一次,重新取放卡才能读到第二次
idserial=bytes([0,0,0,0,0])
status =Objdll.idr_read_once(idserial)
if(status==0):
Objdll.idr_beep(38)
print('16进制卡号:%02x%02x%02x%02x%02x' % (idserial[0],idserial[1],idserial[2],idserial[3],idserial[4]))
Cardno=idserial[4]
Cardno=Cardno+(idserial[3]*256)
Cardno=Cardno+(idserial[2]*65536)
Cardno=Cardno+(idserial[1]*16777216)
CardnoStr='%010d' % Cardno
print('10进制卡号:'+CardnoStr)
elif(status==8):
print('请将卡放在读卡器的感应区')
else:
print('读卡失败,错误代码:'+str(status))
else:
print('请加入正确的参数运行程序')
else:
print('\n')
print('请加以下参数运行程序:')
print('参数 0 驱动读卡器嘀一声')
print('参数 1 读4个字节设备编号')
print('参数 2 读卡,可多次读取同一张卡')
print('参数 3 仅读一次,重新取放卡才能读到第二次')
sys.exit()
07-20
1925
06-08