Vb.net 如何选择性地写入RFID标签?
如何在不使用Vb.net 如何选择性地写入RFID标签?,vb.net,rfid,Vb.net,Rfid,如何在不使用For循环的情况下有效地写入RFID标签。现在我正在循环并填充系列中的所有块。我想做一个程序,我可以用特定的值填充特定的块。我想知道是否有其他方式在RFID上书写。下面的代码显示了使用for循环在RFID上进行写入,该循环跳过整数 这是我的密码: Private Sub RFIDAuth() Dim SkipBlock As String SkipBlock = ",3,7,11,15,19,23,27,31,35,39,43,47,51,55,59," Fo
For
循环的情况下有效地写入RFID标签。现在我正在循环并填充系列中的所有块。我想做一个程序,我可以用特定的值填充特定的块。我想知道是否有其他方式在RFID上书写。下面的代码显示了使用for循环在RFID上进行写入,该循环跳过整数
这是我的密码:
Private Sub RFIDAuth()
Dim SkipBlock As String
SkipBlock = ",3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,"
For i = 1 To 62
If SkipBlock.Contains("," & CStr(i) & ",") = False Then
Call ClearBuffers()
SendBuff(0) = &HFF 'CLA
SendBuff(2) = &H0 'P1: same for all source types
SendBuff(1) = &H86 'INS: for stored key input
SendBuff(3) = &H0 'P2: for stored key input
SendBuff(4) = &H5 'P3: for stored key input
SendBuff(5) = &H1 'Byte 1: version number
SendBuff(6) = &H0 'Byte 2
SendBuff(7) = CInt(i) 'Byte 3: sectore no. for stored key input
SendBuff(8) = &H60 'Byte 4 : Key A for stored key input
'SendBuff(8) = &H61 'Byte 4 : Key B for stored key input
SendBuff(9) = &H20 'Byte 5 : Session key for volatile memory
'SendBuff(9) = CDec(<INPUT>) 'Byte 5 : Session key for non-volatile memory
SendLen = &HA
RecvLen = &H2
retCode = SendAPDUandDisplay(0)
Base64StrfrmRFID = Base64StrfrmRFID & RFIDRead(i)
End If
Next
End Sub
Private Sub RFIDAuth()
将SkipBlock变暗为字符串
SkipBlock=“,3,7,11,15,19,23,27,31,35,39,43,47,51,55,59,”
对于i=1到62
如果SkipBlock.Contains(“,”&CStr(i)&“,”)=False,则
调用ClearBuffers()
SendBuff(0)=&HFF'CLA
SendBuff(2)=&H0'P1:对于所有源类型相同
SendBuff(1)=&H86'插入:用于存储的键输入
SendBuff(3)=&H0'P2:用于存储的键输入
SendBuff(4)=&H5'P3:用于存储的按键输入
SendBuff(5)=&H1'字节1:版本号
SendBuff(6)=&H0'字节2
SendBuff(7)=CInt(i)'字节3:存储密钥输入的扇区编号
SendBuff(8)=&H60'字节4:用于存储密钥输入的密钥A
“SendBuff(8)=&H61”字节4:用于存储密钥输入的密钥B
SendBuff(9)=&H20'字节5:易失性内存的会话密钥
“SendBuff(9)=CDec()”字节5:非易失性内存的会话密钥
SendLen=&HA
RecvLen=&H2
retCode=SendAPDUandDisplay(0)
Base64StrfrmRFID=Base64StrfrmRFID&RFIDRead(i)
如果结束
下一个
端接头
SkipBlock:哈希集而不是字符串
SkipBlock
字符串和包含(…)
对我来说似乎很奇怪,请使用HashSet
,除非有充分的理由使用该字符串:
HashSet<int> SkipBlock = new HashSet<int>(){ 3, 7, 11, … };
RFID布局的结构
使用struct
指定RFID的布局:
[StructLayout (LayoutKind.Explicit, Pack=1, Size=…)]
struct RFID_Block {
[FieldOffset(0)] public const byte CLA = 0xFF;
[FieldOffset(1)] public const byte INS = 0x86;
[FieldOffset(2)] public const byte P1 = 0x0;
…
[FieldOffset(7)] public int SectorNumber; // Should this be an int or a byte?
};
RFID_Block block1 = new RFID_Block();
block1.SectorNumber = i;
…
- 对于每个块相同的字段使用常量,对于可能不同的字段使用非常量
- 如果字段在不同类型的RFID块中具有不同的含义,则可以使用相同的
字段偏移量定义字段,即:
注:struct DualUseRFID_Block { … // Stored key input block [FieldOffset(2)] public byte P2; [FieldOffset(3)] public byte P3; // Some other kind of RFID Block: [FieldOffset(2)] public word FooBar;
- 首先,
与FooBar
具有相同的字段偏移量李>P2
- 其次,
的类型与FooBar
不同;及P2
- 第三,
占用与FooBar
和P2
相同的内存空间P3
或FooBar
和P2
包含有效数据P3
- 首先,
- 检查字段的大小,不要混淆
和字节
(4字节);i、 e.使用一个int
,然后偏移量又多了一个字节的某个东西会引发问题(例如int
)SendBuff(7)=CInt(i):Sendbuf(8)=&H60
- 检查C#和RFID芯片是否同意“持久性”李>
- 看
- 看
- 看;它包括有关内存布局的详细信息,如果您愿意,结构中的字段可以重叠
struct DualUseRFID_Block {
…
// Stored key input block
[FieldOffset(2)] public byte P2;
[FieldOffset(3)] public byte P3;
// Some other kind of RFID Block:
[FieldOffset(2)] public word FooBar;