Преобразование уникального серийного номера RFID

Мой считыватель USB-RFID получает 24-битный идентификатор с карты. Я могу преобразовать этот идентификатор в 8-битный/16-битный формат. Но как я могу преобразовать его в 40-битный формат?

Пример для одного тега:

  • 24-битный десятичный формат (как я понял из читалки): 0005966009
  • 8,16-битный двоичный формат (преобразованный через Python): 01011011, 0000100010111001
  • 8,16-битный десятичный формат (преобразованный через Python): 91, 2233
  • 40-битный десятичный формат (предоставляется производителем): 455272499385

Как я могу получить это 40-битное число из 24-битного числа?

Стандарт тега: уникальный, 125 кГц

Снимок экрана из системы производителя:


person AvS    schedule 03.01.2016    source источник
comment
Почему десятичное число, которое вы получаете от usb reader и от python, не совпадает?.. или это два разных значения?   -  person Iron Fist    schedule 03.01.2016
comment
они одинаковые, но производитель разделил их на два сегмента: 8bit: 91 (01011011bin) и 16bit: 2233 (0000100010111001bin). Когда вы объединяете эти два сегмента, у вас есть: 010110110000100010111001bin, что равно 0005966009 в десятичной системе.   -  person AvS    schedule 03.01.2016
comment
На карте есть наклейка от производителя, и есть эти числа: 91,2233 и в следующей строке: 455272499385. База данных, которую я должен использовать, хранит номер 455272499385, и мой USB-ридер получает 0005966009, поэтому должен быть трюк, чтобы преобразовать этот 24-битный десятичное до 40-битного десятичного...   -  person AvS    schedule 03.01.2016
comment
Что заставляет вас думать, что 455272499385 является 40-битным эквивалентом 0005966009 в 24-битном формате?   -  person Iron Fist    schedule 04.01.2016
comment
Плюс Можете ли вы пояснить, почему 455272499385 имеет 40-битный формат, а 0005966009 - 24-битный формат?   -  person Iron Fist    schedule 04.01.2016
comment
Я добавил снимок экрана из системы, предоставленной производителем. Есть все эти числа (40 бит, 24 бит, 8,16 бит). Я думаю, что 40-битное число генерируется из 24-битного числа + некоторая дополнительная информация (надеюсь, это какой-то стандарт для RFID-карт?)   -  person AvS    schedule 04.01.2016
comment
Прочитайте об этих номерах здесь   -  person Iron Fist    schedule 04.01.2016


Ответы (1)


Нет, вообще невозможно превратить 24-битное число в 40-битное. Такое преобразование означает, что вы добавляете 16 бит дополнительной информации к 24-битному значению. Эта дополнительная информация не появится волшебным образом из ниоткуда.

В вашем случае цифры

  • 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 бита (достаточно) уникальны для всех ваших тегов).

person Michael Roland    schedule 09.01.2016