2014-10-28 7 views
0

У меня проблема с чтением кода с RFID-карты.Код чтения с RFID-карты

Любой алгоритм преобразования существует?

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

же RFID-карты, различные выходы из разных читателей ...

Я знаю эту тему, как, что существуют еще, но я думаю, что это не та же проблема ...

ответ

2

внешний вид преобразования довольно просто:

  • Давайте предположим, что вы хотите, чтобы преобразовать «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(); 
} 
Смежные вопросы