📄 reader.bas
字号:
Attribute VB_Name = "Reader_Generic_Functions"
Option Explicit
Global ComCrw As String
Global ReaderRate As Long
Global result As String
Global ret As Long
Global fd As Long
Public Resp As String * 600
Public lenr As Long
Global Const Opened = True
Global Const Closed = False
Global Const MaxPortNum = 9
Type PORTSTATE
Name As String
fd As Long
State As Boolean
End Type
Global PortQ(0 To MaxPortNum) As PORTSTATE
'Public Declare Function A3A8 Lib "BSAuth.dll" Alias "#1" (rnd As Byte, Key As Byte, Out As Byte) As Long
'Public Declare Function UpdateSSD Lib "BSAuth.dll" Alias "#2" (imsi As Byte, uimid As Byte, aKey As Byte, randSSD As Byte, randBS As Byte, authBS As Byte, Ssda As Byte, Ssdb As Byte) As Long
'Public Declare Function RunCave Lib "BSAuth.dll" Alias "#3" (imsi As Byte, uimid As Byte, Ssda As Byte, Ssdb As Byte, Rand As Byte, Digits As Byte, Auth As Byte, cmeaKey As Byte, Vpm As Byte) As Long
'Declare Function DesVB Lib "USBCrw.dll" (ByVal DESType As Integer, ByVal SingleDESKey As String, ByVal SourDataLen As Integer, ByVal SourData As String, ByVal DestData As String) As Integer
'Declare Function A3A8 Lib "BSAuth.dll" (ByVal srand As String, ByVal Key As String, ByVal simoutput As String) As Long
'读写器操作接口函数
'打开USB读写器
Declare Function CT_open Lib "wdCrwv.dll" (ByVal portname As String, ByVal Param1 As Long) As Long
'关闭与IC卡读写器相连的USB口
Declare Function CT_close Lib "wdCrwv.dll" (ByVal fd As Long) As Long
'对IC卡复位
Declare Function ICC_resetVB Lib "wdCrwv.dll" (ByVal fd As Long, ByRef lenr As Long, ByVal Resp As String) As Long
'从外设向CPU卡或读卡器发送命令并接收返回的数据
Declare Function ICC_tsi_apiVB Lib "wdCrwv.dll" (ByVal fd As Long, ByVal Lens As Integer, ByVal Comm As String, ByRef lenr As Long, ByVal Resp As String) As Long
'设置CPU卡读写地址NAD
Declare Function ICC_set_NAD Lib "wdCrwv.dll" (ByVal fd As Long, ByVal char As Byte) As Long
'ASCII码字符串转换为十六进制字符串
Declare Function CHexToBin Lib "wdCrwv.dll" (ByVal bin As String, ByVal asc As String, ByVal lenr As Byte) As Long
'十六进制字符串转换为ASCII码字符串
Declare Function BinToCHex Lib "wdCrwv.dll" (ByVal asc As String, ByVal bin As String, ByVal lenr As Byte) As Long
'哈什摘要
Declare Function SHA1 Lib "wdCrwv.dll" (ByVal sour As String, ByVal lenr As Byte, ByVal digest As String) As Long
'DES加密/解密
Declare Function SingleDESVB Lib "wdCrwv.dll" (ByVal DESType As Byte, ByVal SingleDESKey As String, ByVal SourDataLen As Long, ByVal SourData As String, ByVal DestData As String) As Long
'3DES加密/解密
Declare Function TripleDESVB Lib "wdCrwv.dll" (ByVal DESType As Byte, ByVal TripleDESKey As String, ByVal SourDataLen As Long, ByVal SourData As String, ByVal DestData As String) As Long
'DES认证码
Declare Function SingleMACVB Lib "wdCrwv.dll" (ByVal SingleMACKey As String, ByVal InitData As String, ByVal SourDataLen As Long, ByVal SourData As String, ByVal MACData As String) As Long
'3DES认证码
Declare Function TripleMACVB Lib "wdCrwv.dll" (ByVal TtripleMACKey As String, ByVal InitData As String, ByVal SourDataLen As Long, ByVal SourData As String, ByVal MACData As String) As Long
Public Function OpenPort(ByVal portname As String, ByVal Rate As Long) As Long
If UCase(Left(portname, 3)) = "COM" Then
OpenPort = CT_open(portname, 9600)
Else
OpenPort = CT_open(portname, 1, 1)
End If
'ret = ICC_set_NAD(&H12)
If OpenPort > 0 Then Q_ADD portname, OpenPort
End Function
Public Function ClosePort(ByVal portname As String, ByVal fd As Long) As Long
CT_close (fd)
Q_DEL portname, fd
End Function
Public Function SendCmd(ByVal portname As String, ByVal fd As Long, ByVal Lens As Integer, _
ByVal Comm As String, ByRef lenr As Long, _
ByRef Resp As String) As Long
SendCmd = ICC_tsi_apiVB(fd, Len(Comm) / 2, Comm, lenr, Resp)
End Function
Public Function ResetCard(ByVal portname As String, ByVal fd As Long, ByRef lenr As Long, ByRef Resp As String) As Long
ResetCard = ICC_resetVB(fd, lenr, Resp)
End Function
Public Sub MySetNad(ByVal fd As Long, ByVal nad As Long)
ICC_set_NAD fd, nad
End Sub
Public Sub Q_ADD(ByVal portname As String, ByVal fd As Long)
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name = "" Then
PortQ(i).Name = portname
PortQ(i).State = Opened
PortQ(i).fd = fd
End If
Exit For
Next i
End Sub
Public Sub Q_DEL(ByVal portname As String, ByVal fd As Long)
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name = portname Then
PortQ(i).Name = ""
PortQ(i).State = Closed
PortQ(i).fd = -1
End If
Exit For
Next i
End Sub
Public Function Q_IsOpened(ByVal portname As String) As Boolean
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name = portname Then
Q_IsOpened = True
Exit Function
End If
Next i
Q_IsOpened = False
End Function
Public Sub Q_CLEAR()
Dim i As Integer
For i = 0 To MaxPortNum
PortQ(i).Name = ""
PortQ(i).State = Closed
PortQ(i).fd = -1
Next i
End Sub
Public Function Q_IsEmpty() As Boolean
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name <> "" Then
Q_IsEmpty = False
Exit Function
End If
Next i
Q_IsEmpty = True
End Function
Public Function Q_Find(ByVal portname As String) As Long
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name = portname Then
Q_Find = PortQ(i).fd
Exit Function
End If
Next i
End Function
Public Function Q_Opened(ByVal portname As String) As Boolean
Dim i As Integer
For i = 0 To MaxPortNum
If PortQ(i).Name = portname Then
Q_Opened = True
Exit Function
End If
Next i
Q_Opened = False
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -