Магнитные карты и ПК
Шрифт:
Ниже представлена полная таблица истинности с шестнадцатеричным эквивалентом каждого символа пятибитного кода ANSI, использование которого рекомендовано стандартами ISO.
Пятиразрядный ANSI-код (цифровой):
Следует отметить, что у данного кода младшие значащие разряды стоят в начале, что соответствует порядку следования битов на магнитной дорожке, когда карта проходит в нормальном направлении считывания (слева направо лицом к головке).
Наибольшую
Символ 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 — также нечетной цифре.
Если во время считывания обнаруживается, что один или несколько символов содержат четное число битов, устройство заключает, что считывание было проведено с ошибкой, и, следовательно, необходимо еще раз вставить карту в считывающее устройство. В таком случае обычно прибегают к способу, состоящему в протирании карты о рукав одежды, что действительно может помочь очистить загрязнившуюся дорожку, но не является гарантированным средством решения любой проблемы.
Важно иметь в виду, что некоторые ошибки могут исказить два бита одного символа, и данная схема контроля четности в этом случае не определит ошибку. Поэтому для лучшей защиты следует предусмотреть, по крайней мере, дополнительный уровень безопасности, а еще лучше — два.
LRC (Longitudinal Redundancy Check) — продольный резервный контроль — наиболее простое из всех средств контроля за целостностью блока данных с помощью одного единственного дополнительного символа. Но при использовании только одного его не обеспечивается уровень безопасности больший, чем при контроле по четности, и многократные ошибки могут исказить контрольный символ, нарушить работу схемы контроля.
Защита с помощью LRC, применяемая к словам из любого числа битов, состоит в последовательном применении операции исключающего ИЛИ (XOR) ко всем словам, а затем в присоединении к ним результата такого вычисления в виде одного единственного слова.
Например, рассмотрим следующий блок данных (без бита четности, младший бит стоит в начале):
Определение LRC происходит по следующим этапам:
Защищенный блок данных будет тогда записан в следующем виде:
или, добавляя бит четности к каждому из составляющих его слову:
Предположим, что первое слово подвержено двойной ошибке. Это позволяет преодолеть контроль четности:
Вычислим LRC этого блока ошибочных данных (без учета входящих в него битов четности и LRC):