支持客户AB密码方案,如有些客户需要“用B密码来改A密码,而A密码不能自己A密码,A密码只有用来读、写、增、减数据块第0、1、2块”的功能,这时就需要下载以下开发包,仔细研读说明文档关于piccchangesinglekeyex函数的操作。正确的AB密码权限访问字编码可用用我们的测试程序取出,测试程序图片请看下图:
关于piccchangesinglekeyex函数的调用,下面展示一段VB6.0的例子代码,方便客户了解:
函数声明:
Private Declare Function piccchangesinglekeyex Lib "OUR_MIFARE.dll" (ByVal ctrlword As Byte, ByVal serial As Long, ByVal area As Byte, ByVal keyA1B0 As Byte, ByVal piccoldkey As Long, ByVal piccnewkey As Long) As Byte
用法:
Private Sub Command6_Click()
Dim i As Integer
Dim status As Byte '存放返回值
Dim myareano As Byte '区号
Dim authmode As Byte '密码类型,用A密码或B密码
Dim myctrlword As Byte '控制字
Dim mypiccserial(0 To 3) As Byte '卡序列号
Dim mypiccoldkey(0 To 5) As Byte '旧密码
Dim mypiccnewkey(0 To 16) As Byte '新密码
'控制字指定,控制字的含义请查看本公司网站提供的动态库说明
myctrlword = BLOCK0_EN + BLOCK1_EN + BLOCK2_EN + EXTERNKEY
'指定区号
myareano = 10 '指定为第8区
'批定密码模式
authmode = 1 '大于0表示用A密码认证,推荐用A密码认证
'指定旧密码
mypiccoldkey(0) = &HFF
mypiccoldkey(1) = &HFF
mypiccoldkey(2) = &HFF
mypiccoldkey(3) = &HFF
mypiccoldkey(4) = &HFF
mypiccoldkey(5) = &HFF
'指定新密码,注意:指定新密码时一定要记住,否则有可能找不回密码,导致该卡报废。
mypiccnewkey(0) = &HFF 'A密码
mypiccnewkey(1) = &HFF
mypiccnewkey(2) = &HFF
mypiccnewkey(3) = &HFF
mypiccnewkey(4) = &HFF
mypiccnewkey(5) = &HFF
mypiccnewkey(6) = &HFF '控制字
mypiccnewkey(7) = &H7
mypiccnewkey(8) = &H80
mypiccnewkey(9) = &H69
mypiccnewkey(10) = &HFF 'B密码
mypiccnewkey(11) = &HFF
mypiccnewkey(12) = &HFF
mypiccnewkey(13) = &HFF
mypiccnewkey(14) = &HFF
mypiccnewkey(15) = &HFF
mypiccnewkey(16) = &H3 '3是表示同时更改A、B、 密码权限访问字,为2表示密码权限访问字不更改,只改A、B密码,为0表示只改A密码
status = piccchangesinglekeyex(myctrlword, VarPtr(mypiccserial(0)), myareano, authmode, VarPtr(mypiccoldkey(0)), VarPtr(mypiccnewkey(0)))
'处理返回函数
Select Case status
Case 0:
MsgBox "操作成功"
Case 8:
MsgBox "请将卡放在感应区"
Case 21 '没有动态库
MsgBox "找不到动态库ICUSB.DLL请将ICUSB.DLL拷贝到VB安装后的目录VB98下"
Case Else
MsgBox "异常"
End Select
'返回值解释
'#define ERR_REQUEST 8'寻卡错误
'#define ERR_READSERIAL 9'读序列吗错误
'#define ERR_SELECTCARD 10'选卡错误
'#define ERR_LOADKEY 11'装载密码错误
'#define ERR_AUTHKEY 12'密码认证错误
'#define ERR_READ 13'读卡错误
'#define ERR_WRITE 14'写卡错误
'#define ERR_NONEDLL 21'没有动态库
'#define ERR_DRIVERORDLL 22'动态库或驱动程序异常
'#define ERR_DRIVERNULL 23'驱动程序错误或尚未安装
'#define ERR_TIMEOUT 24'操作超时,一般是动态库没有反映
'#define ERR_TXSIZE 25'发送字数不够
'#define ERR_TXCRC 26'发送的CRC错
'#define ERR_RXSIZE 27'接收的字数不够
'#define ERR_RXCRC 28'接收的CRC错
End Sub
|