出现问题请VB高手帮忙,我再用VB编写读非接触式IC卡程序。出现问题请VB高手帮忙已知条件:该卡再0扇区的0数据块内存储了四个字节的CSN(十六进制),1扇区的密码为CSN+CSN的左起2个字节。(只有验证了1扇区的密码才能读1扇区内容)。厂家提供的是dcic32.dll.、
我编程出现的问题:我用dcic32.dll中提供的IC_ReadMifare(icdev, address, databuff32)来读0扇区0数锯块。其中databuff32为string类型。读出来后系统显示的databuff32为乱码(r??....eghfi)我需要:1,怎么操作才能让databuff32不显示乱码。最好以十六进制的形式显示出来。 2.另外,我还遇到一个问题:首次运行时,0扇区密码装载成功后,也能成功核对。退出运行,但是卡依然再读卡器上。过一段时间之后,再次运行,却不能成功装载密码,但是核对密码却成功。只有我重启之后首次运行才正常。我的代码中有释放端口和关闭射频模块的功能。我不明白这到底是怎么回事?请大侠指点一二!非常感激!虽然分数不多但是我会倾囊相赠!
我的代码如下:
Private Sub Command1_Click()Dim uckey(6) As Byteuckey(0) = &HA0
uckey(1) = &HA1
uckey(2) = &HA2
uckey(3) = &HA3
uckey(4) = &HA4
uckey(5) = &HA5
If icdev < 0 Then '初始化系统
icdev = IC_InitComm(100)
End If
If icdev <= 0 Then
List1.AddItem ("初始化系统失败!") Exit Sub
End If
List1.AddItem ("初始化成功打开串口!")
st = IC_Load_Key(icdev, 0, 0, uckey(0)) '装载0扇区的密码到读写器,这和后面要
If st <> 0 Then '校验0扇区的密码是相对应的
List1.AddItem ("0号扇区密码装载失败!")
' Exit Sub
End If
List1.AddItem ("0号扇区密码装载成功!")st = IC_Card(icdev, 1, snr) '寻卡函数 cardmode=1 可对卡连续操作,为0时如果执行了HALT操作
If st <> 0 And st <> 1 Then '则卡必须离开感应区后才能再次操作
List1.AddItem ("调用 IC_Card()函数出错,请检查设备连接")
Exit Sub
End If
If st = 1 Then
List1.AddItem ("没有找到卡片")
Exit Sub
End If
List1.AddItem ("感应区内发现了卡号如下:")
'List1.AddItem Str(snr)
List1.AddItem LongAsULong2Double(snr)sector = 0
st = IC_Authentication(icdev, 0, sector) '核对卡密码
If st <> 0 Then
List1.AddItem "核对0号扇区密码失败!"
Exit Sub
End If
List1.AddItem "核对0号扇区密码成功!"
databuff32 = " "
address = 0
st = IC_ReadMifare(icdev, address, databuff32) '读0扇区0号数据块的数据
If st <> 0 Then
List1.AddItem "读卡失败!"
Exit SubEnd If
List1.AddItem "read:0扇区0数据块" + databuff32
我编程出现的问题:我用dcic32.dll中提供的IC_ReadMifare(icdev, address, databuff32)来读0扇区0数锯块。其中databuff32为string类型。读出来后系统显示的databuff32为乱码(r??....eghfi)我需要:1,怎么操作才能让databuff32不显示乱码。最好以十六进制的形式显示出来。 2.另外,我还遇到一个问题:首次运行时,0扇区密码装载成功后,也能成功核对。退出运行,但是卡依然再读卡器上。过一段时间之后,再次运行,却不能成功装载密码,但是核对密码却成功。只有我重启之后首次运行才正常。我的代码中有释放端口和关闭射频模块的功能。我不明白这到底是怎么回事?请大侠指点一二!非常感激!虽然分数不多但是我会倾囊相赠!
我的代码如下:
Private Sub Command1_Click()Dim uckey(6) As Byteuckey(0) = &HA0
uckey(1) = &HA1
uckey(2) = &HA2
uckey(3) = &HA3
uckey(4) = &HA4
uckey(5) = &HA5
If icdev < 0 Then '初始化系统
icdev = IC_InitComm(100)
End If
If icdev <= 0 Then
List1.AddItem ("初始化系统失败!") Exit Sub
End If
List1.AddItem ("初始化成功打开串口!")
st = IC_Load_Key(icdev, 0, 0, uckey(0)) '装载0扇区的密码到读写器,这和后面要
If st <> 0 Then '校验0扇区的密码是相对应的
List1.AddItem ("0号扇区密码装载失败!")
' Exit Sub
End If
List1.AddItem ("0号扇区密码装载成功!")st = IC_Card(icdev, 1, snr) '寻卡函数 cardmode=1 可对卡连续操作,为0时如果执行了HALT操作
If st <> 0 And st <> 1 Then '则卡必须离开感应区后才能再次操作
List1.AddItem ("调用 IC_Card()函数出错,请检查设备连接")
Exit Sub
End If
If st = 1 Then
List1.AddItem ("没有找到卡片")
Exit Sub
End If
List1.AddItem ("感应区内发现了卡号如下:")
'List1.AddItem Str(snr)
List1.AddItem LongAsULong2Double(snr)sector = 0
st = IC_Authentication(icdev, 0, sector) '核对卡密码
If st <> 0 Then
List1.AddItem "核对0号扇区密码失败!"
Exit Sub
End If
List1.AddItem "核对0号扇区密码成功!"
databuff32 = " "
address = 0
st = IC_ReadMifare(icdev, address, databuff32) '读0扇区0号数据块的数据
If st <> 0 Then
List1.AddItem "读卡失败!"
Exit SubEnd If
List1.AddItem "read:0扇区0数据块" + databuff32
把databuff32定义为Byte型,这样输出的就是十进制数,再通过Hex函数转成16进制字符串就行了。问题2:
估计还是端口没有释放的问题,你可以把程序退出以后再用别的程序尝试读写相关的端口试试。
Dim uckey(6) As Byte
应该为
Dim uckey(5) As Byte
前句定义了7的元素的数组。
谢谢你,知道你很仔细的看我的代码了。你说的问题我已经改了,谢谢。不过那部分代码是0扇区的,不能解决我的问题。能不能再帮忙看下啊