📄 mwactivex.ctl
字号:
gbInput(15) = pbInRandom(7)
gbInput(16) = &H0
For i = 0 To 15
gbInput(16) = gbInput(i) Xor gbInput(16) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 17, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "内部认证错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "内部认证错误,ERROR NO:" + gsErrorNO
Exit Function
End If
pbOutEncrypt(0) = gbOutput(3)
pbOutEncrypt(1) = gbOutput(4)
pbOutEncrypt(2) = gbOutput(5)
pbOutEncrypt(3) = gbOutput(6)
pbOutEncrypt(4) = gbOutput(7)
pbOutEncrypt(5) = gbOutput(8)
pbOutEncrypt(6) = gbOutput(9)
pbOutEncrypt(7) = gbOutput(10)
Internal_Authentication = True
End Function
Public Function Sam_Internal_Authentication(psKeyID As String, pbInRandom() As Byte, pbOutEncrypt() As Byte) As Boolean
'psKeyID 为内部认证密钥的标识符,1个字节的字符串数据,如:"01".
'pbInRandom 从接口设备发来的8字节的随机数,取前8字节.
'pbOutEncrypt 返回的加密数据,取前8字节.
gsErrHint = ""
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = &HD 'length
gbInput(3) = &H0 'cla
gbInput(4) = &H88 'ins
gbInput(5) = &H0 'p1
gbInput(6) = Val("&H" + psKeyID) 'p2
gbInput(7) = &H8 'le
gbInput(8) = pbInRandom(0)
gbInput(9) = pbInRandom(1)
gbInput(10) = pbInRandom(2)
gbInput(11) = pbInRandom(3)
gbInput(12) = pbInRandom(4)
gbInput(13) = pbInRandom(5)
gbInput(14) = pbInRandom(6)
gbInput(15) = pbInRandom(7)
gbInput(16) = &H0
For i = 0 To 15
gbInput(16) = gbInput(i) Xor gbInput(16) 'bcc calculation
Next i
giRet = sam_protocol(glIcdev, 17, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "内部认证错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "内部认证错误,ERROR NO:" + gsErrorNO
Exit Function
End If
pbOutEncrypt(0) = gbOutput(3)
pbOutEncrypt(1) = gbOutput(4)
pbOutEncrypt(2) = gbOutput(5)
pbOutEncrypt(3) = gbOutput(6)
pbOutEncrypt(4) = gbOutput(7)
pbOutEncrypt(5) = gbOutput(8)
pbOutEncrypt(6) = gbOutput(9)
pbOutEncrypt(7) = gbOutput(10)
Sam_Internal_Authentication = True
End Function
Public Function Verify(psPin As String) As Boolean
'psPin 为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
gsErrHint = ""
giLength = Len(psPin) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + giLength 'length
gbInput(3) = &H0 'cla
gbInput(4) = &H20 'ins
gbInput(5) = &H0 'p1
gbInput(6) = &H0 'p2
gbInput(7) = giLength 'le
giRet = asc_hex(psPin, gbInput(8), giLength)
gbInput(8 + giLength) = &H0
For i = 0 To (7 + giLength)
gbInput(8 + giLength) = gbInput(i) Xor gbInput(8 + giLength) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 8 + giLength + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "校验PIN错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "校验PIN错误,ERROR NO:" + gsErrorNO
Exit Function
End If
Verify = True
End Function
Public Function Sam_Verify(psPin As String) As Boolean
'psPin 为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
gsErrHint = ""
giLength = Len(psPin) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + giLength 'length
gbInput(3) = &H0 'cla
gbInput(4) = &H20 'ins
gbInput(5) = &H0 'p1
gbInput(6) = &H0 'p2
gbInput(7) = giLength 'le
giRet = asc_hex(psPin, gbInput(8), giLength)
gbInput(8 + giLength) = &H0
For i = 0 To (7 + giLength)
gbInput(8 + giLength) = gbInput(i) Xor gbInput(8 + giLength) 'bcc calculation
Next i
giRet = sam_protocol(glIcdev, 8 + giLength + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "校验PIN错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "校验PIN错误,ERROR NO:" + gsErrorNO
Exit Function
End If
Sam_Verify = True
End Function
Public Function Change_PIN(psOldPIN As String, PsNewPin As String) As Boolean
'psOldPin 原个人密码,为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
'psNewPin 新个人密码,为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
Dim piOldLen As Integer
Dim piNewLen As Integer
gsErrHint = ""
piOldLen = Len(psOldPIN) \ 2
piNewLen = Len(PsNewPin) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + piOldLen + 1 + piNewLen 'length
gbInput(3) = &H80 'cla
gbInput(4) = &H5E 'ins
gbInput(5) = &H1 'p1
gbInput(6) = &H0 'p2
gbInput(7) = piOldLen + 1 + piNewLen 'le
giRet = asc_hex(psOldPIN, gbInput(8), piOldLen)
gbInput(8 + piOldLen) = &HFF
giRet = asc_hex(PsNewPin, gbInput(8 + piOldLen + 1), piNewLen)
gbInput(8 + piOldLen + 1 + piNewLen) = &H0
For i = 0 To (8 + piOldLen + 1 + piNewLen - 1)
gbInput(8 + piOldLen + 1 + piNewLen) = gbInput(i) Xor gbInput(8 + piOldLen + 1 + piNewLen) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 8 + piOldLen + 1 + piNewLen + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "修改PIN错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "修改PIN错误,ERRROR NO:" + gsErrorNO
Exit Function
End If
Change_PIN = True
End Function
Public Function Sam_Change_PIN(psOldPIN As String, PsNewPin As String) As Boolean
'psOldPin 原个人密码,为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
'psNewPin 新个人密码,为用户输入的2-6个字节的字符串(4-12个字符串).如2字节的PIN,传入为:"????",此处的字符串个数一定是整数.
Dim piOldLen As Integer
Dim piNewLen As Integer
gsErrHint = ""
piOldLen = Len(psOldPIN) \ 2
piNewLen = Len(PsNewPin) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + piOldLen + 1 + piNewLen 'length
gbInput(3) = &H80 'cla
gbInput(4) = &H5E 'ins
gbInput(5) = &H1 'p1
gbInput(6) = &H0 'p2
gbInput(7) = piOldLen + 1 + piNewLen 'le
giRet = asc_hex(psOldPIN, gbInput(8), piOldLen)
gbInput(8 + piOldLen) = &HFF
giRet = asc_hex(PsNewPin, gbInput(8 + piOldLen + 1), piNewLen)
gbInput(8 + piOldLen + 1 + piNewLen) = &H0
For i = 0 To (8 + piOldLen + 1 + piNewLen - 1)
gbInput(8 + piOldLen + 1 + piNewLen) = gbInput(i) Xor gbInput(8 + piOldLen + 1 + piNewLen) 'bcc calculation
Next i
giRet = sam_protocol(glIcdev, 8 + piOldLen + 1 + piNewLen + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "修改PIN错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "修改PIN错误,ERRROR NO:" + gsErrorNO
Exit Function
End If
Sam_Change_PIN = True
End Function
Public Function Read_Record(piRecordID As Integer, psFileID As String, piByteNumber As Integer, psRecord As String) As Boolean
'psFileID 是1字节的2个字符串,表示要选择的文件.当低3位为100时,高5位不为00000时,表示短文件标识符,否则表示当前文件.
'piRecordID 要读的记录号.
'psRecord 读出的记录字符串.
Dim psRecordTemp As String * 100
gsErrHint = ""
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HB2 'ins
gbInput(5) = CByte(piRecordID) 'p1
gbInput(6) = Val("&H" + psFileID) 'p2
gbInput(7) = CByte(piByteNumber)
gbInput(8) = &H0
For i = 0 To 7
gbInput(8) = gbInput(i) Xor gbInput(8) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 9, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "读记录错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "读记录错误,ERROR NO:" + gsErrorNO
Exit Function
End If
giRet = hex_asc(gbOutput(3), psRecordTemp, giLength - 2)
psRecord = Mid(psRecordTemp, 1, (giLength - 2) * 2)
Read_Record = True
End Function
Public Function Sam_Read_Record(piRecordID As Integer, psFileID As String, piByteNumber As Integer, psRecord As String) As Boolean
'psFileID 是1字节的2个字符串,表示要选择的文件.当低3位为100时,高5位不为00000时,表示短文件标识符,否则表示当前文件.
'piRecordID 要读的记录号.
'psRecord 读出的记录字符串.
Dim psRecordTemp As String * 100
gsErrHint = ""
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HB2 'ins
gbInput(5) = CByte(piRecordID) 'p1
gbInput(6) = Val("&H" + psFileID) 'p2
gbInput(7) = CByte(piByteNumber)
gbInput(8) = &H0
For i = 0 To 7
gbInput(8) = gbInput(i) Xor gbInput(8) 'bcc calculation
Next i
giRet = sam_protocol(glIcdev, 9, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "读记录错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "读记录错误,ERROR NO:" + gsErrorNO
Exit Function
End If
giRet = hex_asc(gbOutput(3), psRecordTemp, giLength - 2)
psRecord = Mid(psRecordTemp, 1, (giLength - 2) * 2)
Sam_Read_Record = True
End Function
Public Function Update_Record(piRecordID As Integer, psFileID As String, piByteNumber As Integer, psRecord As String) As Boolean
'psRecord 要修改的数据,lc*2个字符串.
gsErrHint = ""
giLength = Len(psRecord) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + giLength 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HDC 'ins
gbInput(5) = CByte(piRecordID) 'p1
gbInput(6) = Val("&H" + psFileID) 'p2
gbInput(7) = CByte(piByteNumber)
giRet = asc_hex(psRecord, gbInput(8), giLength)
gbInput(8 + giLength) = &H0
For i = 0 To 7 + giLength
gbInput(8 + giLength) = gbInput(i) Xor gbInput(8 + giLength) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 8 + giLength + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "修改记录错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "修改记录错误,ERROR NO:" + gsErrorNO
Exit Function
End If
Update_Record = True
End Function
Public Function Sam_Update_Record(piRecordID As Integer, psFileID As String, piByteNumber As Integer, psRecord As String) As Boolean
'psRecord 要修改的数据,lc*2个字符串.
gsErrHint = ""
giLength = Len(psRecord) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + giLength 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HDC 'ins
gbInput(5) = CByte(piRecordID) 'p1
gbInput(6) = Val("&H" + psFileID) 'p2
gbInput(7) = CByte(piByteNumber)
giRet = asc_hex(psRecord, gbInput(8), giLength)
gbInput(8 + giLength) = &H0
For i = 0 To 7 + giLength
gbInput(8 + giLength) = gbInput(i) Xor gbInput(8 + giLength) 'bcc calculation
Next i
giRet = sam_protocol(glIcdev, 8 + giLength + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "修改记录错误."
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "修改记录错误,ERROR NO:" + gsErrorNO
Exit Function
End If
Sam_Update_Record = True
End Function
Public Function Append_Record(psFileID As String, piByteNumber As Integer, psRecord As String) As Boolean
'psRecord 要追加的数据,lc*2个字符串.
giLength = Len(psRecord) \ 2
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 + giLength 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HE2 'ins
gbInput(5) = &H0 'p1
gbInput(6) = Val("&H" + psFileID) 'p2
gbInput(7) = CByte(piByteNumber)
giRet = asc_hex(psRecord, gbInput(8), giLength)
gbInput(8 + giLength) = &H0
For i = 0 To 7 + giLength
gbInput(8 + giLength) = gbInput(i) Xor gbInput(8 + giLength) 'bcc calculation
Next i
giRet = cpu_protocol(glIcdev, 8 + giLength + 1, gbInput(0), gbOutput(0))
If giRet <> 0 Then
gsErrHint = "追加记录错误"
Exit Function
End If
giLength = gbOutput(2)
giRet = hex_asc(gbOutput(0), gsHex, giLength + 3)
If Not Get_Result(gsHex, giLength) Then
gsErrHint = "追加记录错误"
Exit Function
End If
Append_Record = True
End Function
Public Function Read_Binary(psFileID As String, piBegin As Integer, piByteNumber As Integer, pbRead() As Byte) As Boolean
'psFileID 短文件标识符或当前文件.
'piBegin 读的偏移量.
'piByteNumber 读取的字节数.
'pbRead() 返回的字节.
gsErrHint = ""
gbInput(0) = &H0 'nad
gbInput(1) = &H40 'pcb
gbInput(2) = 5 'length
gbInput(3) = &H0 'cla
gbInput(4) = &HB0 'ins
gbInput(5) = Val("&H" + (psFileID)) 'p1
gbInput(6) = CByte(piBegin) 'p2
gbInput(7) = CByte(piByteNumber)
gbInput(8) = &H0
For i = 0 To 7
gbInput(8) = gbInput(i) Xor gbInput(8) 'bcc calculation
Next i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -