想法是:用LenB()返回字节长度,前16个字节存放到第4块,17~32个字节存放到第5块,后面的存放到第6块。
下面的代码不对额,但就是上面的意思。求大神帮助!
sector = 1【选择1扇区】
st = rf_authentication(icdev, 0, sector)【对1扇区进行验证,返回值为0,验证成功,二次开发包的函数】
If (st = 0) Then
'List1.AddItem ("rf_authentication ok")
Else
MsgBox "1扇区验证失败!", vbCritical
Exit Sub
End If
data1 = Trim(Text1.Text)【把Text1中的字符赋值给data1】
If LenB(data1) >= 0 And LenB(data1) <= 16 Then【当输入字节长度在0~16之间,则全部写到块4】
st = rf_write(icdev, 4, data1)
Else【否则把前16个字节写到块5,后面的写到块6】
st = rf_write(icdev, 4, MidB(data1, 1, 16)) And st = rf_write(icdev, 5, MidB(data1, 17))
End If
10 个解决方案
#1
读卡器与M1卡之间有完整的一套协议,你的想法极有可能是不能实现的。
我的理解是M1卡本身就拒绝一次读写多个块。M1卡虽然一点都不智能,但是也要比4428 4412之类的卡要复杂的多,不是想怎样就能怎样的,必须要遵循它的协议。
我的理解是M1卡本身就拒绝一次读写多个块。M1卡虽然一点都不智能,但是也要比4428 4412之类的卡要复杂的多,不是想怎样就能怎样的,必须要遵循它的协议。
#2
数据长度的判断要放在前面,然后逐块认证、写入。
#3
楼主跟我是不是一个单位的哟,呵呵。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
#4
已经实现了,基本跟你的思路一样,只不过我没有判断字符长度。我们卡里需要记录三个数据,我把这三个数据分别写入三个区,每个区有3个块能用,这样每个块对应一个文本框,把1~16字符写入第一个文本框,第17~32写到第2个文本框,第33~48写到第三个文本框,最后三个文本框连接显示出来,当然那三个文本框运行时不可见。
#5
写第一扇区的代码:
st = rf_write(icdev, 4, Mid(data10, 1, 8))
st = rf_write(icdev, 5, Mid(data10, 9, 16))
st = rf_write(icdev, 6, Mid(data10, 17, 24))
#6
理解错楼主的意思了
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
#7
——————————————————————————————————————————————
对头,就是这样的,即使Mid(data10, 9, 16)=""、Mid(data10, 17, 24)=""(也就是data10这个字符串只有8个或者<8个,上面这些语句不会出错,写入时也没有问题,读取时也读出来的是空值)
请问楼主哪里人?
#8
山西的,诠释自己一个人瞎琢磨,现在又有新问题了,看看我在论坛里开发语言/框架——VB——数据库发的另一个帖子。【关于VB代码实现数据库的问题,有兴趣进来看看】
#9
理解错楼主的意思了
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
#10
其实也可以写的时候判断字符的长度,但是比较麻烦,所以我采用了偷懒的办法。
#1
读卡器与M1卡之间有完整的一套协议,你的想法极有可能是不能实现的。
我的理解是M1卡本身就拒绝一次读写多个块。M1卡虽然一点都不智能,但是也要比4428 4412之类的卡要复杂的多,不是想怎样就能怎样的,必须要遵循它的协议。
我的理解是M1卡本身就拒绝一次读写多个块。M1卡虽然一点都不智能,但是也要比4428 4412之类的卡要复杂的多,不是想怎样就能怎样的,必须要遵循它的协议。
#2
数据长度的判断要放在前面,然后逐块认证、写入。
#3
楼主跟我是不是一个单位的哟,呵呵。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
#4
楼主跟我是不是一个单位的哟,呵呵。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
已经实现了,基本跟你的思路一样,只不过我没有判断字符长度。我们卡里需要记录三个数据,我把这三个数据分别写入三个区,每个区有3个块能用,这样每个块对应一个文本框,把1~16字符写入第一个文本框,第17~32写到第2个文本框,第33~48写到第三个文本框,最后三个文本框连接显示出来,当然那三个文本框运行时不可见。
#5
楼主跟我是不是一个单位的哟,呵呵。
感觉楼主开发的这个IC卡跟我现在开发的IC一模一样也。(是否是深圳明华奥汉科技的IC卡,看那函数极像)
我是这样操作的,一个扇区四个块,只能写一、二、三个块,第四块是密码区不管它。
这IC的写入跟读出可能双方要约定好(比如你写了后对方读的时候要按你写的规则来读,比如哪几个区哪几个块写的是什么信息)。
两种方法写入:
1.首先检查要写入的字符串的长度,如果超过8个字符就把超过的再接着写入第二块;
2.先不管字符的长度,约定好(比如第一扇区我只写入公司名称),我不管公司名称的长度是多少(但是不要超过24个,因为一个扇区最多写三个块,一个块8个汉字),我全部把它写入三个扇区,前8个字符写入1块,中8个字符写入2块,剩下的写入3块——这种写法,就是当所有字符串不超过8个时,也不会出错,只是后面两个块写入的全部是空值而已。
采用怎样的思路就看你的了。
写第一扇区的代码:
st = rf_write(icdev, 4, Mid(data10, 1, 8))
st = rf_write(icdev, 5, Mid(data10, 9, 16))
st = rf_write(icdev, 6, Mid(data10, 17, 24))
#6
理解错楼主的意思了
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
#7
写第一扇区的代码:
st = rf_write(icdev, 4, Mid(data10, 1, 8))
st = rf_write(icdev, 5, Mid(data10, 9, 16))
st = rf_write(icdev, 6, Mid(data10, 17, 24))
——————————————————————————————————————————————
对头,就是这样的,即使Mid(data10, 9, 16)=""、Mid(data10, 17, 24)=""(也就是data10这个字符串只有8个或者<8个,上面这些语句不会出错,写入时也没有问题,读取时也读出来的是空值)
请问楼主哪里人?
#8
写第一扇区的代码:
st = rf_write(icdev, 4, Mid(data10, 1, 8))
st = rf_write(icdev, 5, Mid(data10, 9, 16))
st = rf_write(icdev, 6, Mid(data10, 17, 24))
——————————————————————————————————————————————
对头,就是这样的,即使Mid(data10, 9, 16)=""、Mid(data10, 17, 24)=""(也就是data10这个字符串只有8个或者<8个,上面这些语句不会出错,写入时也没有问题,读取时也读出来的是空值)
请问楼主哪里人?
#9
理解错楼主的意思了
开始以为楼主想一次写入多个块,原来楼主是想多个连续块拼接一个数据串。
呵呵
#10
其实也可以写的时候判断字符的长度,但是比较麻烦,所以我采用了偷懒的办法。