Принцип декодирования с накладыванием маски на примере использования карт Mifare и Em-marine Декодирование на стороне TCPCardReader'a включается строкой useDecodeCards=1  в TCPCardReader.ini в настройках конкретного считывателя: [READER1] COMPORT=6 COMPORTPARAMS=baud=9600 data=8 parity=N stop=1 Prefix=; Postfix=? useDecodeCards=1 StartTermChars=i FinishTermChars=?#13;#10;#0; Таким образом при включении декодирования TCPCardReader отправляет часть трека начинающегося с символа следующего за StartTermChars и заканчивающимся символом стоящим перед одним из FinishTermChars в Decodecards. Итак Decodecards получает только эту часть и декодирует (преобразовывает/выделяет идентификатор) её. В decodecards.ini В секции [mask] перечисляются маски по префиксам которых можно разделять декодирование разных карт [mask] card_em = ne* card_mifare = fare* card = * В данном примере если пришедший от TCPCardReader'a трек содержит префикс "ne" ,то обработка такого трека будет описана  в секции [cards.card_em]. Соответственно если трек содержит префикс "fare" то обработка такого трека описана в секции [cards.card_mifare]. Символ  "*"  в данном случае означает любое количество символов. Чтение данной секции происходит последовательно, то есть при первом совпадении пришедшего трека с маской дальнейшей просмотр секции не ведётся Далее в секциях с названием "cards." и левой частью до знака равенства в секции [mask] конкретного типа трека настраивается декодирование. [cards.card_em] ExcludedPrefix=ne[ code=2 CardDecodeType = MASK mask=****dddddddd DecodeTypeEx = 0 Опцией CardDecodeType = MASK    выбираем алгоритм декодирования с накладыванием маски. Сначала удаляется часть не участвующая в декодировании используя параметр ExcludedPrefix. Далее происходит декодирование(выделение трека) применением маски mask=. mask=****dddddddd Здесь * означает любой один символ который игнорируется. Символы "d"  или "h" означают систему счисления в которой пришел в decodecards. h - HEX  16-тиричная (Hexadecimal) d - DEС 10-тиричная (Decimal) В этом примере обрабатываются первые 12 символов(их может быть больше 12 в пришедшем треке) из которых первые 4 игнорируются, а следующие 8 воспринимаются как десятичное число. Если на их месте появляется символ который не возможно преобразовать к числу в десятичной системе счисления декодирование произойдет с ошибкой  и Декодер вернет "0" в качестве трека. В случае если трек приходит в 16-теричной системе (например у карт Mifare) в маске необходимо использовать уже символы h чтобы Декодер воспринимал трек как 16-ричный. mask=****hhhhhhhh После применения маски получается трек который всегда будет в 10-тичной системе независимо от исходной системы и он уже вернется в TcpCardReader. Далее TCPCardReader обрамит этот трек префиксом "Prefix=;" и суффиксом "Postfix=?" и отправит клиентам. Готовый пример Dodecoder.ini для карт E-marine и Mifare: [frf] fsUnit=fsdecodecard.upas [general] usemask=1 TrackResultLog= [mask] card_mi = fare* card_em = ne* [cards.card_mi] ExcludedPrefix=fare[ code=2 CardDecodeType = MASK mask=hhhhhhhh DecodeTypeEx = 0 [cards.card_em] ExcludedPrefix=ne[ code=2 CardDecodeType = MASK mask=****dddddddd DecodeTypeEx = 0