Длина дорожки 3,375 дюйма (длина карты) соответствует теоретическому максимуму в 253 и 708 бит. Эти цифры можно сравнить, например, с объемом памяти чип-карты, который не превышает 256 бит при гораздо более высокой стоимости, но, необходимо это подчеркнуть, обеспечивающей безопасность, не идущую ни в какое сравнение с магнитными картами.
Длина, занимаемая битом на дорожке, составляет 034 мм при 75 bpi и 0,12 мм при 210 bpi. Зная, что при записи логическая 1 кодируется удвоенной частотой, нетрудно представить, какой должна быть ширина воздушного зазора магнитной головки. И наконец, можно оценить скорость считывания данных при соответствующей скорости прохождения карты, составляющей от 100 до 1500 мм/с.
Разброс цифр достаточно типичный в практике: приблизительно 300-4500 бит/с (bps — bits per second или бод) при 75 bpi, 800-12500 bps при 210 bpi.
Учитывая, что логическая 1 кодируется удвоенной частотой, демодулятор должен работать в диапазоне частот от 300 Гц до 25 кГц, что не всегда просто осуществить.
В зависимости от дорожки данные обычно кодируются в виде символов, содержащих 5 или 7 бит. На дорожках ISO 2 и ISO 3 размещаются исключительно цифровые символы (цифры), в то время как дорожка ISO 1 может вмещать и алфавитно-цифровые данные (цифры и буквы). С помощью 4 бит удается представить 16 различных символов, что достаточно для кодирования цифр от 0 до 9 и нескольких специальных символов. Пятый бит — для контроля по четности, и применение его будет рассмотрено ниже. Шесть бит позволяют закодировать 64 различных символа — все буквы алфавита (без разделения на прописные и строчные), 10 цифр и некоторое число специальных символов. Вместе с битом контроля четности получается, таким образом, семиразрядное кодирование.
ПЯТИРАЗРЯДНЫЙ ЦИФРОВОЙ КОД
Ниже представлена полная таблица истинности с шестнадцатеричным эквивалентом каждого символа пятибитного кода ANSI, использование которого рекомендовано стандартами ISO.
Пятиразрядный ANSI-код (цифровой):
Следует отметить, что у данного кода младшие значащие разряды стоят в начале, что соответствует порядку следования битов на магнитной дорожке, когда карта проходит в нормальном направлении считывания (слева направо лицом к головке).
Наибольшую важность представляют три особых символа: флажок начала (start), флажок конца (end) и разделитель поля данных (sep). Полезное содержимое дорожки (закодированные на ней данные) всегда заключено между start и end, разделитель sep может неоднократно использоваться внутри блока данных с тем, чтобы разграничить зоны, которые важно отличать друг от друга.
Символ start играет наиважнейшую роль, поскольку распознавание именно этого символа позволяет декодеру узнать, что он получает поток данных, закодированных на пяти битах, и точно определить его начало.
Мы знаем, что для синхронизации демодулятора запись всегда должна начинаться, по крайней мере, с десяти нулей, которые, естественно, требуется удалить при декодировании.
Блок «полезных» данных может начинаться с одного или нескольких битов в состоянии 0, но при этом флажок start позволяет избежать любого разночтения. В конце дорожки блок данных завершается флажком end, за ним сразу следует символ определения ошибки, так называемый LRC, речь о котором пойдет ниже.
Начало и конец дорожки заполняются нулями, что объясняет явное несоответствие между объявленными объемами: так, например, 40 символов На дорожке ISO 2 соответствует 200 бит, в то время как дорожка может вместить их до 253. Аналогичный расчет возможен и для дорожки ISO 3, которая в состоянии вместить 708 бит, а ограничена 107 символами, представляющими только 535 бит, так же, как и дорожка ISO 1, содержащая 79 полезных символов по 7 бит (то есть 553 бита).
Практический опыт подсказывает, что при кодировании следует примерно поровну распределить лишние нулевые биты, между началом и концом дорожки. Тогда полезные данные окажутся размещенными в зоне, наиболее благоприятной для считывания, а именно посередине дорожки.
АЛФАВИТНО-ЦИФРОВОЙ КОД
Ниже представлена таблица истинности семибитного кода ANSI в той же форме, что и предыдущая.
Семиразрядный ANSI-код (алфавитно-цифровой):
Помимо значительно большего числа специальных символов, редко используемых на практике, вновь можно отметить наличие флажков start, end и разделителя полей sep. Роль, выполняемая этими тремя флажками, идентична той, что они играют в пятибитном цифровом коде. Однако обратим внимание, что кодирование было выбрано так, чтобы наверняка не спутать оба стартовых символа (11010 и 1010001).
Правильно разработанный декодер будет полностью в состоянии распознать «на лету» флажок start и понять из этого, что данные закодированы семью битами.
КОНТРОЛЬ ЧЕТНОСТИ
При считывании магнитных носителей, таких как карты и билеты, ошибок бывает предостаточно. Дорожка может быть загрязнена, поцарапана или частично размагничена; кроме того, сам процесс вставки карт в считывающее устройство может быть не вполне удачным, в то время как качество считывающей головки также не всегда бывает безупречным.
Во избежание того, чтобы ошибка в одном единственном бите кредитной карточки не могла привести к вычитанию суммы одной из ваших покупок с банковского счета какой-либо знаменитости, совершенно необходимо внедрить целый комплекс мер по определению ошибок.
Наиболее простой метод заключается в добавлении бита четности к каждой группе битов, предназначенных для кодирования символа.
Принято выбирать значение бита чётности таким образом, чтобы общее число единичных битов в общем коде символа всегда оставалось нечетным (контроль на нечетность).
Например, в пятибитном коде цифра 6, записываемая как 0110 в двоичной системе и содержащая четное число битов в состоянии 1, будет тогда закодирована в виде 01101 путем прибавления в качестве бита четности 1, что в сумме приведет к 3 — нечетной цифре.
В семибитном коде буква Т, определяемая битами 001011, наоборот, будет закодирована как 0010110 путем добавления в качестве бита четности 0, что приведет общее число битов в состоянии 1 к 3 — также нечетной цифре.
Если во время считывания обнаруживается, что один или несколько символов содержат четное число битов, устройство заключает, что считывание было проведено с ошибкой, и, следовательно, необходимо еще раз вставить карту в считывающее устройство. В таком случае обычно прибегают к способу, состоящему в протирании карты о рукав одежды, что действительно может помочь очистить загрязнившуюся дорожку, но не является гарантированным средством решения любой проблемы.
Важно иметь в виду, что некоторые ошибки могут исказить два бита одного символа, и данная схема контроля четности в этом случае не определит ошибку. Поэтому для лучшей защиты следует предусмотреть, по крайней мере, дополнительный уровень безопасности, а еще лучше — два.
КОНТРОЛЬ С ПОМОЩЬЮ
LRCLRC (Longitudinal Redundancy Check) — продольный резервный контроль — наиболее простое из всех средств контроля за целостностью блока данных с помощью одного единственного дополнительного символа. Но при использовании только одного его не обеспечивается уровень безопасности больший, чем при контроле по четности, и многократные ошибки могут исказить контрольный символ, нарушить работу схемы контроля.
Защита с помощью LRC, применяемая к словам из любого числа битов, состоит в последовательном применении операции исключающего ИЛИ (XOR) ко всем словам, а затем в присоединении к ним результата такого вычисления в виде одного единственного слова.
Например, рассмотрим следующий блок данных (без бита четности, младший бит стоит в начале):
Определение LRC происходит по следующим этапам:
Защищенный блок данных будет тогда записан в следующем виде:
или, добавляя бит четности к каждому из составляющих его слову:
Предположим, что первое слово подвержено двойной ошибке. Это позволяет преодолеть контроль четности:
Вычислим LRC этого блока ошибочных данных (без учета входящих в него битов четности и LRC):
Вычисленный код LRC блока с ошибками (5) отличается от LRC, переданного в составе блока без ошибок (0), что индицирует наличие ошибки, не позволяя, однако, определить ее местоположение: LRC — механизм не исправления ошибок, а только их обнаружения.