В семибитном коде буква Т, определяемая битами 001011, наоборот, будет закодирована как 0010110 путем добавления в качестве бита четности 0, что приведет общее число битов в состоянии 1 к 3 — также нечетной цифре.
Если во время считывания обнаруживается, что один или несколько символов содержат четное число битов, устройство заключает, что считывание было проведено с ошибкой, и, следовательно, необходимо еще раз вставить карту в считывающее устройство. В таком случае обычно прибегают к способу, состоящему в протирании карты о рукав одежды, что действительно может помочь очистить загрязнившуюся дорожку, но не является гарантированным средством решения любой проблемы.
Важно иметь в виду, что некоторые ошибки могут исказить два бита одного символа, и данная схема контроля четности в этом случае не определит ошибку. Поэтому для лучшей защиты следует предусмотреть, по крайней мере, дополнительный уровень безопасности, а еще лучше — два.
КОНТРОЛЬ С ПОМОЩЬЮ LRC
LRC ( Longitudinal Redundancy Check ) — продольный резервный контроль — наиболее простое из всех средств контроля за целостностью блока данных с помощью одного единственного дополнительного символа. Но при использовании только одного его не обеспечивается уровень безопасности больший, чем при контроле по четности, и многократные ошибки могут исказить контрольный символ, нарушить работу схемы контроля.
Защита с помощью LRC, применяемая к словам из любого числа битов, состоит в последовательном применении операции исключающего ИЛИ (XOR) ко всем словам, а затем в присоединении к ним результата такого вычисления в виде одного единственного слова.
Например, рассмотрим следующий блок данных (без бита четности, младший бит стоит в начале):
Определение LRC происходит по следующим этапам:
Защищенный блок данных будет тогда записан в следующем виде:
или, добавляя бит четности к каждому из составляющих его слову:
Предположим, что первое слово подвержено двойной ошибке. Это позволяет преодолеть контроль четности:
Вычислим LRC этого блока ошибочных данных (без учета входящих в него битов четности и LRC):
Вычисленный код LRC блока с ошибками (5) отличается от LRC, переданного в составе блока без ошибок (0), что индицирует наличие ошибки, не позволяя, однако, определить ее местоположение: LRC — механизм не исправления ошибок, а только их обнаружения.
В подобном случае следует повторно проводить считывание до тех пор, пока контроль четности и по LRC пройдет успешно.
В частном случае стандартизованных магнитных карт (а также большого числа нестандартных магнитных носителей) обычно прибегают к защите с помощью LRC всех символов, начиная с флажка start и заканчивая флажком end включительно. Таким образом, LRC занимает место сразу после флажка end , то есть непосредственно перед нулями заполнения.
Вероятность того, что одна или несколько ошибок смогут ускользнуть от такого двойного контроля, крайне мала. Несмотря на это, как правило, используется дополнительный третий уровень защиты.
КОНТРОЛЬ С ПОМОЩЬЮ LUHN CHECK
Рассматриваемая чисто арифметическая обработка, применимая только к цифровым данным, существует в двух вариантах в зависимости от четного или нечетного числа цифр контролируемого числа.
Если число включает четное количество цифр, необходимо, прежде всего, умножить на два каждую цифру из нечетного ряда и вычесть из полученного результата 9, если он превышает или равен 10. Все цифры, обработанные таким образом, затем складываются, и к ним добавляются все цифры четного ряда.
Контролируемое число считается верным тогда и только тогда, когда окончательный результат кратен 10. В случае карт с нечетным количеством цифр поступают наоборот: удваиваются цифры четного ряда.
Читать дальше