2016-01-03 39 views
2

我的USB-RFID读卡器从卡上接收到一个24位ID。我可以将此ID转换为8位/ 16位格式。但我怎样才能将它转换成40位格式?RFID唯一序列号转换

示例一个标签:

  • 24位十进制格式(如我从读取器获得):0005966009
  • 8,16位二进制格式(通过Python换算):01011011,0000100010111001
  • 8,16位十进制格式(通过Python换算):91,2233
  • 40位十进制格式(由生产商提供):455272499385

如何从24位数中得到40位数?

标签标准:独特的,125千赫从制造商的系统

截图:

+0

为什么从* usb阅读器*和* python *得到的小数是不一样的?..或者是那两个不同的值? –

+0

它们是相同的,但制造商将它们分为两部分:8位:91(01011011bin)和16位:2233(0000100010111001bin)。当你合并这两个段你有:010110110000100010111001bin什么是0005966009在十进制 – AvS

+0

从制造商卡上有一个stcker,有这些数字:91,2233和在下一行:455272499385.我必须使用的数据库商店号码455272499385和我的USB读卡器recive 0005966009,所以必须有一个把这个24位小数转换为40位小数的技巧...... – AvS

回答

1

没有,一般是不可能把一个24位数为40位数字。这种转换意味着您将16位额外信息添加到24位值。这额外的信息不会神奇般地出现。

在你的情况下,该数字是

  • 24位格式:0005966009 十二月 = 5B08B9hex
  • 8 + 16位格式:091 十二月 十二月 = 5Bhex & 08B9hex
  • 40位格式:455272499385 dec = 6A005B08B9hex

因此,所有三个数字都包含24个公共位(5B08B9hex)。 40位数字有一个额外的前缀值6A00hex

既然您没有透露您使用的是什么RFID系统和您正在使用什么标签(除了它们在125千赫兹上运行),无法判断该前缀是否是某个标准前缀,对于所有标签是相同的或者如果每个标签(或每个制造商,客户等)的前缀更改

如果所有标签的前缀相同,则可以轻松使用值6A00hex作为每个标签序列号的高16位。但是,如果前缀对于不同的标签可能不同,那么除了让读取器读取完整的40位序列号外没有别的办法。不过,如果你所有的读者只读24位的值,我不明白你为什么要使用整个40位的值。即使您已经有一个包含整个40位值的数据库,您也可以轻松地将该值修改为24位值(只要所有标签中的较低24位都是(足够)唯一的)。