Формат пластиковой карты с магнитной полосой

Наиболее полно и точно карты с магнитной полосой описаны в стандартах ISO7810-ISO7813, в частности:

  1. ISO7810 (ГОСТ Р ИСО/МЭК 7810-2002) — Карты идентификационные. Физические характеристики.
  2. ISO7811-2 (ГОСТ Р ИСО/МЭК 7811-2-2001) — Карты идентификационные. Способ записи. Часть 2. Магнитная полоса малой коэрцетивной силы.
  3. ISO7811-6 (ГОСТ Р ИСО/МЭК 7811-6-2001) — Карты идентификационные. Способ записи. Часть 6. Магнитная полоса большой коэрцетивной силы.

Кроме того, существует группа стандартов на карты тонкие гибкие — ИСО/МЭК 15457, но речь пойдёт не о них (это мягкие карты с магнитной полосой для проезда на общественном транспорте, оплаты автостоянок, платных автодорог и т.д., форматов TFC.0, TFC.1, TFC.5)

Итак, согласно описанным выше стандартам, карты с магнитной полосой бывают трёх форматов: ID-1, ID-2, ID-3. Наиболее распространённым и привычным для нас является формат ID-1, именно в таком формате выпускается большинство пластиковых карт, о нём и пойдёт речь. На карте формата ID-1 есть 3 дорожки с информацией: ISO1, ISO2, ISO3, разделённые защитными промежутками, чтобы данные с разных дорожек не накладывались друг на друга (обычно эти промежутки есть, хотя на рисунке ниже видно, что по стандарту края дорожек вполне могут накладываться друг на друга). Размеры карты и расположение дорожек смотрим на рисунке ниже.

Формат пластиковой карты с магнитной полосой

Информация на магнитной полосе карты записана с помощью F/2F частотного кодирования (с чем это едят и как можно декодировать — читаем вот здесь) и представляет собой алфавитно-цифровые символы в 7-ми битной кодировке или цифровые символы в 5-ти битной кодировке.

Для определения ошибок считывания применяется контроль чётности и продольный контроль по избыточности (или продольный резервный контроль — LRC).

В обоих кодировках самый старший бит используется для контроля чётности, а остальные биты — это биты данных. То есть биты данных составляют соответственно 6 и 4 бита (следовательно, ёмкость кодировок составляет: 26=64 символа и 24=16 символов). Бит контроля чётности позволяет обнаружить одиночные ошибки при считывании.

Продольный резервный контроль производится следующим образом — между всеми словами данных (естественно, без бита чётности) последовательно выполняется операция XOR (исключающее ИЛИ), полученное слово дополняется битом контроля чётности и дописывается в самом конце записи, после символа end. Совместно с контролем чётности LRC позволяет обнаружить двойные ошибки при считывании.

На магнитной полосе сначала записаны младшие биты, потом старшие, в этом же порядке они считываются (то есть как бы задом наперёд). Если приёмный регистр считывателя выполняет сдвиг влево и запись в младший разряд последнего считанного бита, то в результате в регистре будет восстановлен нормальный порядок бит (сначала старшие, потом младшие биты). В представленных ниже таблицах сохранён нормальный порядок бит (бит чётности отделён пробелом).

Таблицы кодировок:

Пятибитная кодировка

Двоичные данные hex Символ Служебная функция
1 0000 00h 0  
0 0001 01h 1  
0 0010 02h 2  
1 0011 03h 3  
0 0100 04h 4  
1 0101 05h 5  
1 0110 06h 6  
0 0111 07h 7  
0 1000 08h 8  
1 1001 09h 9  
1 1010 0Ah : управление
0 1011 0Bh ; начало (start)
1 1100 0Ch < управление
0 1101 0Dh = разделитель
0 1110 0Eh > управление
1 1111 0Fh ? конец (end)

Семибитная кодировка

Двоичные данные hex Символ Служебная функция
1 000000 00h пробел  
0 000001 01h !  
0 000010 02h "  
1 000011 03h # резерв
0 000100 04h $  
1 000101 05h % начало (start)
1 000110 06h &  
0 000111 07h  
0 001000 08h (  
1 001001 09h )  
1 001010 0Ah *  
0 001011 0Bh +  
1 001100 0Ch ,  
0 001101 0Dh  
0 001110 0Eh .  
1 001111 0Fh /  
0 010000 10h 0  
1 010001 11h 1  
1 010010 12h 2  
0 010011 13h 3  
1 010100 14h 4  
0 010101 15h 5  
0 010110 16h 6  
1 010111 17h 7  
1 011000 18h 8  
0 011001 19h 9  
0 011010 1Ah :  
1 011011 1Bh ;  
0 011100 1Ch <  
1 011101 1Dh =  
1 011110 1Eh >  
0 011111 1Fh ? конец (end)
0 100000 20h @  
1 100001 21h A  
1 100010 22h B  
0 100011 23h C  
1 100100 24h D  
0 100101 25h E  
0 100110 26h F  
1 100111 27h G  
1 101000 28h H  
0 101001 29h I  
0 101010 2Ah J  
1 101011 2Bh K  
0 101100 2Ch L  
1 101101 2Dh M  
1 101110 2Eh N  
0 101111 2Fh O  
1 110000 30h P  
0 110001 31h Q  
0 110010 32h R  
1 110011 33h S  
0 110100 34h T  
1 110101 35h U  
1 110110 36h V  
0 110111 37h W  
0 111000 38h X  
1 111001 39h Y  
1 111010 3Ah Z  
0 111011 3Bh [ резерв
1 111100 3Ch \ резерв
0 111101 3Dh ] резерв
0 111110 3Eh ^ разделитель
1 111111 3Fh _  

По правилам, данные на любой дорожке должны начинаться со служебного символа «start» и заканчиваться служебным символом «end». Эти символы выбраны таким образом, что позволяют определить начало блока полезной информации, определить направление считывания карты и даже определить формат кодировки информации (пятибитная или семибитная).

Управляющие символы предназначены для целей управления аппаратными средствами и не могут быть использованы для передачи информации (содержания данных).

Разделители используются для разделения полей данных на карте.

В семибитной кодировке символы [ \ ] зарезервированы для дополнительных национальных символов и не должны применяться в рамках международного обмена информацией, символ # зарезервирован для произвольных дополнительных графических символов.

Ну и пара примеров того, как это может выглядеть:

— стандартная дорожка ISO2:

;XXXXXXXXXXXXXXXX=YYYYYYYYYYYYYYYYY?Z, 37 символов

X…X — номер карты, Z — LRC (здесь, как видите, данные начинаются с символа start и заканчиваются символом end, номер карты 16-тизначный, такой же как и у банковских карт, присутствует LRC, то есть всё по правилам)

— нестандартная дорожка ISO2:

1:XXXX<YYYYY:1, 14 символов

(на этой дорожке нет ни символа start, ни символа end, не говоря уже про LRC)

Подробно про приём и декодирования F/2F частотно кодированных сигналов можно прочитать вот здесь.

А вот здесь можно почитать про то, как самостоятельно изготовить простейший считыватель магнитной полосы пластиковых карт.

Добавить комментарий