【问题标题】:Reading code from RFID card从 RFID 卡读取代码
【发布时间】:2014-10-28 15:05:05
【问题描述】:

我在从 RFID 卡读取代码时遇到问题。

是否存在任何转换算法?

Examples of codes:
04006d0ba0 -> 00008596950352
0d001c59b3 -> 00047253268956
0d001c5134 -> 00047253268674
0d001c9317 -> 00047253265550
0d001c93ed -> 00047253265531
0d001c1b12 -> 00047253261700
0d001c1b1d -> 00047253261707
e800ef0aac -> 00485339628883

相同的 RFID 卡,来自不同读卡器的不同输出...

我知道这样的话题还存在,但我认为这不是同一个问题......

【问题讨论】:

    标签: rfid number-formatting


    【解决方案1】:

    转换看起来很简单:

    • 假设您要将“04006d0ba0”转换为“00008596950352”。

    • 从十六进制数“04006d0ba0”中取出每个半字节(即“0”,然后是“4”,然后是“0”,然后是“0”,然后是“6”,...)

    • 反转每个半字节的位(最低有效位变为最高有效位,第二位变为倒数第二位),例如"0" (= 0000) 保持 "0" (= 0000),"4" (= 0100) 变为 "2" (= 0010),"6" (= 0110) 保持不变“6”(=0110)等

    • 转换成十进制数格式。

    在 Java 中,这可能看起来像这样:

    private static final byte[] REVERSE_NIBBLE = {
            0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
            0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
    };
    
    private long convert(byte[] input) {
        byte[] output = new byte[input.length];
    
        for (int i = 0; i < input.length; ++i) {
            output[i] = (byte)((REVERSE_NIBBLE[(output[i] >>> 4) & 0x0F] << 4) |
                                REVERSE_NIBBLE[ output[i]        & 0x0F]);
        }
    
        return new BigInteger(1, output).longValue();
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2021-03-23
      相关资源
      最近更新 更多