Мини-учебник работы со строкой форматирования RFID считывателей
Многие метки гораздо сложнее, чем это кажется на первый взгляд. Чтобы легко справиться с многообразием вариантов считывания была придумана "строка форматирования"
На картинке ниже содержимое начальных(из множества) секторов некоторых типов карт из нашей программы ODRFIDKit, которая используется со считывателями ODRFID-M/N/E и может вам пригодиться для записи карт.
Чтение карты MIFARE 1K
Данные сектора 0
Запись данных в карту
в режиме ASCII
Чтение карты
MIFARE Ultralight
Чтение карты Em-Marine
Только UID
Строка форматирования позволяет задать произвольный формат вывода данных с карты, произвести манипуляции (изменить порядок байт, добавить или вырезать данные) сразу в считывателе и выдать уже преобразованный результат.
Строка форматирования позволяет задать произвольный формат вывода данных с карты, произвести манипуляции (изменить порядок байт, добавить или вырезать данные) сразу в считывателе и выдать уже преобразованный результат.
Строка форматирования задаётся через программу-конфигуратор, AT-команды или через Web-интерфейс, в зависимости от устройства.
Коды для форматированного вывода
Код; Описание
a; переключиться в режим вывода ASCII символов (байт данных карты будет выведен в ASCII только если он лежит в диапазоне 32/"пробел" - 126/"~"
d; переключиться в десятичный режим вывода (каждый байт будет выведен как число от 0 до 255)
h; переключиться в шестнадцатеричный режим вывода (каждый байт будет выведен как hh, где h - 0..9,a..f)
H; переключиться в шестнадцатеричный режим вывода (каждый байт будет выведен как HH, где H - 0..9,A..F)
U*; вывести UID целиком
U~; вывести UID целиком с обратным порядком байт
UN:M; вывести байты UIDa с номера N по номер M включительно
UN; вывести байт UIDа номер N
BK%*; вывести блок K целиком (отсчет блоков с нуля, размер зависит от типа карты - 4/16 байт)
BK%~; вывести блок номер K целиком с обратным порядком байт
BK%N:M; вывести часть блока K
BK%N; вывести байт N блока К
\t; символ табуляции
\n; символ конца строки
S; вывести SAK карты
e; вывести идентификатор EM-Marine в десятичном виде (только ODRFID-E/M версии 2.x). Выводятся последние 3 байта номера карты как 32-х битное целое (big endian) как 10 цифр с ведущими нулями
E; вывести идентификатор EM-Marine в текстовом виде (только ODRFID-E/M версии 2.x). Выводится facility code (3ий с конца байт), точка, затем два последних байта как 16-ти битное целое (bit endian) как 5 цифр с ведущими нулями
D;вывести идентификатор EM-Marine в десятичном виде (только ODRFID-E/M версии 2.9 и старше (выводятся последние 4 байта номера карты как 32-х битное целое (big endian): 10 цифр с ведущими нулями)
P; Только для устройств версии 3.0 и старше, поддерживающих EMV. Вывести идентификатор карты (PAN для EMV-совместимых карт, UID для всех остальных). Поддерживаются все постфиксы (*, ~, и.т.д), поддерживаемые кодом U. PAN всегда выводится цифрами в ASCII-формате (префиксы H, d и.т.д игнорируются). UID обрабатывается идентично коду U. Если считыватель не поддерживает EMV-карты, код P работает идентично коду U
Примеры
Дополнительно
Любой другой ASCII символ выводится как есть (для вывода зарезервированных символов (например, B, U, S) перед ними необходимо поставить символ '\'. Для вывода символа '\' его необходимо указать дважды: '\\'). Неподдерживаемые конкретным считывателем команды выводятся "как есть".
Режим по-умолчанию - шестнадцатеричный вывод. Заглавные или прописные буквы зависит от настроек считывателя (опция Capitalize).
В командах с параметрами M:N отсчет идет с нуля. Если M<N - вывод происходит в обратном порядке.
Максимальная длина строки формата 32 байт, выводимой строки - 128 байт
Как получить строки, как на карте:
Целочисленное значение: развернутый UID, преобразованный в uint32 с отображением в десятичном формате. С версии 3.3 его можно получить строкой dUr.
Третий байт UID отображается в виде десятичного числа, запятая, второй байт*256 + первый байт. С версии 3.3 его можно получить строкой dUd, а вариант с запятой dUc.
Код; Результат
\Hello, hU*; выводит "Hello, 8d430ba4", где "8d430ba4" - UID карты
Olle\h, hU~; выводит "Olleh, a40b438d"
\Hello\tHU0:1\tU2:3; выводит "Hello-->8D43-->0BA4", где "-->" - символ табуляции
U2:3-B1%3:4; выводит 0BA4-4242 для Mifare Classic, 3B56-42 для Mifare Ultralight (размер блока 4 байта)
Форматированный вывод в режиме AT-команд
Устанавливаем формат вывода: "Hello, UID-карты в HEX в нижнем регистре".
AT+F\Hello, hU*
OK
Сохраняем настройки
AT+P
Подносим карту, устройство выводит:
Hello, dcb43d07