Мини-учебник работы со строкой форматирования 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 байт
Примеры
Код; Результат
\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