Python读取ID卡号源码
读卡器介绍:https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.20.64315b437VyT8H&id=562957272162https://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-17663462238.20.64315b437VyT8H&id=56
·

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'IDReader.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QDesktopWidget
import struct # struct的pack函数把任意数据类型变成字符串
import ctypes # 调用DLL动态库要有这个引用
class Ui_Frame(object):
def setupUi(self, Frame):
Frame.setObjectName("Frame")
Frame.resize(531, 421)
font = QtGui.QFont()
font.setPointSize(10)
Frame.setFont(font)
self.pushButton_beep = QtWidgets.QPushButton(Frame)
self.pushButton_beep.setGeometry(QtCore.QRect(10, 10, 511, 30))
self.pushButton_beep.setObjectName("pushButton_beep")
self.pushButton_getdevicenum = QtWidgets.QPushButton(Frame)
self.pushButton_getdevicenum.setGeometry(QtCore.QRect(10, 42, 511, 30))
self.pushButton_getdevicenum.setObjectName("pushButton_getdevicenum")
self.pushButton_piccreadex = QtWidgets.QPushButton(Frame)
self.pushButton_piccreadex.setGeometry(QtCore.QRect(10, 75, 511, 30))
self.pushButton_piccreadex.setObjectName("pushButton_piccreadex")
self.pushButton_piccreadone = QtWidgets.QPushButton(Frame)
self.pushButton_piccreadone.setGeometry(QtCore.QRect(10, 108, 511, 30))
self.pushButton_piccreadone.setObjectName("pushButton_piccreadone")
self.listWidget = QtWidgets.QListWidget(Frame)
self.listWidget.setGeometry(QtCore.QRect(10, 184, 511, 231))
self.listWidget.setObjectName("listWidget")
self.pushButton_clearlist = QtWidgets.QPushButton(Frame)
self.pushButton_clearlist.setGeometry(QtCore.QRect(350, 148, 170, 30))
self.pushButton_clearlist.setObjectName("pushButton_clearlist")
self.label = QtWidgets.QLabel(Frame)
self.label.setGeometry(QtCore.QRect(12, 153, 70, 30))
self.label.setObjectName("label")
self.retranslateUi(Frame)
self.pushButton_clearlist.clicked.connect(self.pushButton_clearlist_click)
self.pushButton_beep.clicked.connect(self.pushButton_beep_click)
self.pushButton_getdevicenum.clicked.connect(self.pushButton_getdevicenum_click)
self.pushButton_piccreadex.clicked.connect(self.pushButton_piccreadex_click)
self.pushButton_piccreadone.clicked.connect(self.pushButton_piccreadone_click)
QtCore.QMetaObject.connectSlotsByName(Frame)
def retranslateUi(self, Frame):
_translate = QtCore.QCoreApplication.translate
Frame.setWindowTitle(_translate("Frame", "IDReader"))
self.pushButton_beep.setText(_translate("Frame", "驱动读卡器发声"))
self.pushButton_getdevicenum.setText(_translate("Frame", "获取读卡器出厂序号"))
self.pushButton_piccreadex.setText(_translate("Frame", "读取ID、HID卡号"))
self.pushButton_piccreadone.setText(_translate("Frame", "仅读取一次卡号,再次读取需将卡拿开再重新刷卡"))
self.pushButton_clearlist.setText(_translate("Frame", "清空下栏提示信息"))
self.label.setText(_translate("Frame", "提示信息栏"))
def ListBottom(self):
self.listWidget.scrollToBottom()
seleid = self.listWidget.count() - 1
self.listWidget.item(seleid).setSelected(True)
def pushButton_clearlist_click(self):
self.listWidget.clear()
def ListErrInf(self, Errcode):
if (Errcode == 8):
self.listWidget.addItem('错误代码:8,未寻到卡,请重新拿开卡后再放到感应区!')
elif (Errcode == 21):
self.listWidget.addItem('错误代码:21,没有动态库!')
elif (Errcode == 22):
self.listWidget.addItem('错误代码:22,动态库或驱动程序异常!')
elif (Errcode == 23):
self.listWidget.addItem('错误代码:23,有可能是以下原因:')
self.listWidget.addItem('1、表示未检测到免驱动读卡器!')
self.listWidget.addItem('2、有驱动读卡器表示驱动程序错误或未检测到有驱读卡器!')
self.listWidget.addItem('3、Linux系统请以sudo超级用户模式运行')
elif (Errcode == 24):
self.listWidget.addItem('错误代码:24,操作超时,一般是动态库没有反映!')
elif (Errcode == 25):
self.listWidget.addItem('错误代码:25,发送字数不够!')
elif (Errcode == 26):
self.listWidget.addItem('错误代码:26,发送的CRC错!')
elif (Errcode == 27):
self.listWidget.addItem('错误代码:27,接收的字数不够!')
elif (Errcode == 28):
self.listWidget.addItem('错误代码:28,接收的CRC错!')
else:
self.listWidget.addItem('未知错误,错误代码:' + str(Errcode))
self.ListBottom()
def pushButton_beep_click(self):
status = Objdll.idr_beep(50) % 256
if status == 0:
self.listWidget.addItem("读卡器已执行响声指令!")
self.ListBottom()
else:
self.ListErrInf(status)
def pushButton_getdevicenum_click(self):
devno = bytes(4) # 声明4个字节缓冲
status = Objdll.pcdgetdevicenumber(devno) % 256
if (status == 0):
Objdll.idr_beep(38)
SerialNum = ''
for num in range(0, len(devno)):
SerialNum = SerialNum + '%03d' % (devno[num])
if (num < len(devno) - 1):
SerialNum = SerialNum + '-'
self.listWidget.addItem('读取设备编号成功!编号:' + SerialNum)
self.ListBottom()
else:
self.ListErrInf(status)
def pushButton_piccreadex_click(self):
idserial = bytes(5)
status = Objdll.idr_read(idserial) % 256
if (status == 0):
Objdll.idr_beep(38)
Cardno = idserial[4]
Cardno = Cardno + (idserial[3] * 256)
Cardno = Cardno + (idserial[2] * 65536)
Cardno = Cardno + (idserial[1] * 16777216)
CardnoStr = '%010d' % Cardno
self.listWidget.addItem('读卡成功!16进制卡号:%02X%02X%02X%02X%02X' % (idserial[0], idserial[1], idserial[2], idserial[3], idserial[4]) +",转换成10进制卡号:"+CardnoStr)
else:
self.ListErrInf(status)
def pushButton_piccreadone_click(self):
idserial = bytes(5)
status = Objdll.idr_read_once(idserial) % 256
if (status == 0):
Objdll.idr_beep(38)
Cardno = idserial[4]
Cardno = Cardno + (idserial[3] * 256)
Cardno = Cardno + (idserial[2] * 65536)
Cardno = Cardno + (idserial[1] * 16777216)
CardnoStr = '%010d' % Cardno
self.listWidget.addItem('读卡成功!16进制卡号:%02X%02X%02X%02X%02X' % (idserial[0], idserial[1], idserial[2], idserial[3], idserial[4]) +",转换成10进制卡号:"+CardnoStr)
else:
self.ListErrInf(status)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Frame = QtWidgets.QFrame()
ui = Ui_Frame()
ui.setupUi(Frame)
screen = QDesktopWidget().screenGeometry()
size = Frame.geometry()
# 获得窗口相关坐标
newLeft = (screen.width() - size.width()) // 2
newTop = (screen.height() - size.height()) // 2
# 移动窗口使其居中
Frame.move(newLeft, newTop)
Frame.show()
if sys.platform == 'win32':
# windows系统加载当前目录下的DLL库
dllfile = sys.path[0] + '\OUR_IDR.dll'
Objdll = ctypes.windll.LoadLibrary(dllfile)
elif sys.platform == 'linux':
# Linux加载当前目录下的so库
dllfile = sys.path[0] + '/libOURIDR.so'
Objdll = ctypes.cdll.LoadLibrary(dllfile)
else:
# macOS加载当前目录下的.dylib库
dllfile = sys.path[0] + '/libOURIDR.dylib'
Objdll = ctypes.cdll.LoadLibrary(dllfile)
sys.exit(app.exec_())
更多推荐



所有评论(0)