#!/usr/bin/env python
# -*- coding: utf-8 -*-
#python -m pdb xxx.py 调试程度 n命令单步执行,s命令单步执行 会进入函数内部 b xx ,c
#import pdb pdb.set_trace() 设断点
import ctypes #调用DLL动态库要有这个引用
import sys
import os
#加载当前目录下的DLL
dllfile=sys.path[0]+'\OUR_MIFARE.dll'
Objdll = ctypes.windll.LoadLibrary(dllfile)
Objdll = ctypes.WinDLL(dllfile)
#根据入口参数执行不同功能
if(len(sys.argv)>1):
if(str(sys.argv[1])=='0'): #驱动读写器发出响声
Objdll.pcdbeep(50)
elif(str(sys.argv[1])=='1'): #读取设备的出厂编号
devno=bytes([0,0,0,0]) #声明4个字节缓冲
status=Objdll.pcdgetdevicenumber(devno)
if(status==0):
Objdll.pcdbeep(38)
SerialNum=''
for num in range(0,len(devno)):
SerialNum=SerialNum+'%02x' % (devno[num])
if(num
SerialNum=SerialNum+'-'
print('设备出厂编号:'+ SerialNum)
else:
print('读取设备编号失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='2'): #读卡的序列号
mypiccserial=bytes([0,0,0,0,0,0,0]) #7个字节卡序列号
status = Objdll.piccrequest_ul(mypiccserial)
if(status==0):
Objdll.pcdbeep(38)
piccserialStr=''
for num in range(0,len(mypiccserial)):
piccserialStr=piccserialStr+'%02x ' % (mypiccserial[num])
print('7字节卡序号:'+ piccserialStr)
elif(status==8):
print('请将卡片放置在读写器的感应区!')
elif():
print('读卡失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='3'): #读卡内4个页的数据
mypiccserial=bytes([0,0,0,0,0,0,0]) #7个字节卡序列号
mypiccdata=bytes([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]) #16个字节读卡的数据缓冲
ReadPageBegin=0 #起始页地址
status = Objdll.piccrequest_ul(mypiccserial) #寻卡并读卡的序列号
if(status==0):
piccserialStr=''
for num in range(0,len(mypiccserial)):
piccserialStr=piccserialStr+'%02x ' % (mypiccserial[num])
print('7字节卡序号:'+ piccserialStr)
status = Objdll.piccread_ul(ReadPageBegin,mypiccdata)
if(status==0):
Objdll.pcdbeep(38)
piccdataStr=''
for num in range(0,len(mypiccdata)):
piccdataStr=piccdataStr+'%02x ' % (mypiccdata[num])
print('块%d-块%d数据:' % (ReadPageBegin,ReadPageBegin+3)+piccdataStr)
elif():
print('读卡失败,错误代码:'+str(status))
elif(status==8):
print('请将卡片放置在读写器的感应区!')
elif(status==23):
print('请连上USB 读写器!')
elif():
print('读卡失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='4'): #写一个页数据
mypiccserial=bytes([0,0,0,0,0,0,0]) #7个字节卡序列号
mypiccdata=bytes([0,1,2,3]) #1个页4个字节的写卡数据
WritePage=4 #改写页地址
status = Objdll.piccrequest_ul(mypiccserial) #寻卡并读卡的序列号
if(status==0):
piccserialStr=''
for num in range(0,len(mypiccserial)):
piccserialStr=piccserialStr+'%02x ' % (mypiccserial[num])
print('7字节卡序号:'+ piccserialStr)
status = Objdll.piccwrite_ul(WritePage,mypiccdata)
if(status==0):
Objdll.pcdbeep(38)
print('改写块%d内数据成功!' % (WritePage))
elif():
print('写卡失败,错误代码:'+str(status))
elif(status==8):
print('请将卡片放置在读写器的感应区!')
elif(status==23):
print('请连上USB 读写器!')
elif():
print('读卡失败,错误代码:'+str(status))
elif(str(sys.argv[1])=='5'): #认证卡片密码
mypiccserial=bytes([0,0,0,0,0,0,0]) #7个字节卡序列号
mypicckey=bytes([eval('0x12'),eval('0x34'),eval('0x56'),eval('0x78')]) #4个字节的卡密码
mypiccntagpack=bytes([0,0]) #返回的确认码
Objdll.pcdbeep(38)
status = Objdll.piccrequest_ul(mypiccserial) #寻卡并读卡的序列号
if(status==0):
piccserialStr=''
for num in range(0,len(mypiccserial)):
piccserialStr=piccserialStr+'%02x ' % (mypiccserial[num])
print('7字节卡序号:'+ piccserialStr)
status = Objdll.piccauthkey_ntag(mypicckey,mypiccntagpack)
if(status==0):
Objdll.pcdbeep(38)
print('卡密码认证成功!确认码为:%02x%02x' % (mypiccntagpack[0],mypiccntagpack[1]))
elif(status==12):
print('卡密码认证失败,错误代码:'+str(status))
elif():
print('卡密码认证失败,错误代码:'+str(status))
elif(status==8):
print('请将卡片放置在读写器的感应区!')
elif(status==23):
print('请连上USB 读写器!')
elif():
print('读卡失败,错误代码:'+str(status))
else:
print('请加入正确的参数运行程序')
else:
print('\n')
print('请加以下参数运行程序:')
print('参数 0 驱动读卡器嘀一声')
print('参数 1 读4个字节设备编号')
print('参数 2 读7个字节卡序列号')
print('参数 3 读卡内4个页的数据')
print('参数 4 改写1个页的数据')
print('参数 5 认证卡片密码')
sys.exit()
#qq:954486673
#微信:13822155058