Wiegand读卡器能够读取与手机相同的序列号吗?
13.56 MHz的Wiegand读卡器(更具体地说是ISO/IEC 14443 Type A)通常读取卡片/标签的防冲突标识符。手机似乎也会向您显示防冲突标识符(UID)。所以,是的,两个设备都读取相同的数据元素。
然而,正如您正确发现的那样,读卡器只通过Wiegand接口传输26位值(实际上只有24位,因为其中两位是奇偶校验位)。由于UID具有4字节、7字节或10字节,因此需要将UID截断为3字节值以通过Wiegand接口进行传输。
我可以从Wiegand读卡器中期望哪些数据?
在Wiegand接口上,帧看起来像这样:
b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17 b18 b19 b20 b21 b22 b23 b24 b25
PE D23 D22 D21 D20 D19 D18 D17 D16 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 PO
第一行是Wiegand电线传输数据的编号,第二行是接收器解释后的位数。PE(b0)是D23..D12(b1..b12)的偶校验位,PO(b25)是D11..D0(b13..b24)的奇校验位,D23..D0是表示无符号整数数字的数据位(实际上是两个数字,因为高8位是站点代码,低16位是标签ID)。
虽然将站点代码和标签ID逻辑分开了,但这些读卡器通常只使用标签ID的截断形式作为24位值。
如何将该值映射到您手机上收到的十六进制值强烈取决于该十六进制表示法是如何创建的(特别是它的字节顺序)。可能仅仅需要取最后三个字节(F52327
),但也可能是1BF523
(或任何其反向字节(甚至位)的变化)。
更新:关于您读卡器得到的值...
首先,您似乎从值中省略了前导零。例如,1BF52327
是一个4字节的值,有32位:
1 B F 5 2 3 2 7
0001 1011 1111 0101 0010 0011 0010 0111
似乎读卡器接收到的值也是如此(或者图书馆自动删除了前导奇偶校验位,或者删除了两个奇偶校验位并在值末尾添加了任意数量的零)。
所以你的值是:
1101 1000 1101 1100 0000 1010 1110 0100 0000 0000
1101 1100 0000 1010 1110 0100 0
正如你自己发现的那样,这些值明显相关,一个字节在开头缺失,HID读卡器的值在末尾填充更多的零。
仔细观察,这些值还与第一个二进制值相关。诀窍是首先反转这些值。因此,这些值
1101 1000 1101 1100 0000 1010 1110 0100 0000 0000
1101 1100 0000 1010 1110 0100 0
成为
0010 0111 0010 0011 1111 0101 0001 1011 1111 1111
0010 0011 1111 0101 0001 1011 1
对于来自Wiegand读卡器的值,这也将修复尾随的奇校验位(PO),因为现在有7个'1'位(包括PO)(尽管这可能只是巧合)。
您现在可以看到,这些值恰好代表反转字节顺序的第一个值。如果您反转字节顺序,则可以看到:
1 B F 5 2 3 2 7
0001 1011 1111 0101 0010 0011 0010 0111
你获得了什么
2 7 2 3 F 5 1 B
0010 0111 0010 0011 1111 0101 0001 1011
将其与另外两个值进行比较,您会发现它们是匹配的:
0010 0111 0010 0011 1111 0101 0001 1011
0010 0111 0010 0011 1111 0101 0001 1011 1111 1111
0010 0011 1111 0101 0001 1011 1
因此,您从HID读卡器接收到的值表示为2723F51B
,而从Wiegand读卡器接收到的值表示为23F51B
。因此,字节27
被截断。