RFID唯一序列号转换

4
我的USB-RFID读卡器从卡片接收到一个24位的ID。我可以将此ID转换为8位/16位格式。但是,我如何将其转换为40位格式?
一个标签的示例:
- 24位十进制格式(读卡器获取的格式):0005966009 - 8、16位二进制格式(通过Python转换):01011011,0000100010111001 - 8、16位十进制格式(通过Python转换):91、2233 - 40位十进制格式(由制造商提供):455272499385
我如何从24位数得到这个40位数?
标签标准:唯一,125 kHz
制造商系统的截图:

它们是相同的,但制造商将它们分成两个部分:8位:91(01011011bin)和16位:2233(0000100010111001bin)。当你合并这两个部分时,你得到:010110110000100010111001bin,这在十进制中是0005966009。 - AvS
卡片上有制造商的贴纸,上面有这些数字:91、2233和下一行:455272499385。我需要使用的数据库存储了号码455272499385,而我的USB读卡器接收到的是0005966009,因此必须有一个技巧将这个24位十进制数转换为40位十进制数... - AvS
你为什么认为455272499385是24位格式中0005966009的40位等效形式? - Iron Fist
请问为什么 455272499385 是40位格式,而 0005966009 是24位格式? - Iron Fist
我添加了一个由制造商提供的系统截图。那里有所有这些数字(40位、24位、8、16位)。我认为40位数字是由24位数字加上一些附加信息生成的(我希望这是RFID卡的某种标准?) - AvS
显示剩余2条评论
1个回答

3
一般情况下,将一个24位数转换为40位数是不可能的。这样的转换意味着您要向24位值添加16位额外信息。这些额外信息不会自动出现。
在您的情况下,数字如下:
24位格式:0005966009dec = 5B08B9hex 8 + 16位格式:091dec&02233dec = 5Bhex & 08B9hex 40位格式:455272499385dec = 6A005B08B9hex 因此,所有三个数字都包含24个公共位(5B08B9hex)。40位数字具有附加前缀值6A00hex
既然您没有透露使用的RFID系统和标签(除了它们都在125千赫运行),那么就无法确定该前缀是否是所有标签都相同的标准前缀,还是该前缀针对每个标签(或每个制造商、客户等)都会发生变化。
如果该前缀对于所有标签都相同,您可以轻松地将值6A00hex用作每个标签序列号的高16位。但是,如果前缀对于不同的标签可能不同,则除了获取读取完整40位序列号的读卡器之外,没有其他方法。
尽管如此,如果所有的读写器都只能读取24位值,那么我不明白为什么您甚至要使用完整的40位值。即使您已经有一个包含完整40位值的数据库,您也可以将该值轻松地修剪为24位值(只要所有标签的低24位在所有标签中(足够)唯一)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接