Контрольная цифра — это форма проверки избыточности, используемая для обнаружения ошибок в идентификационных номерах, таких как номера банковских счетов, которые используются в приложении, где они будут хотя бы иногда вводиться вручную. Она аналогична двоичному биту четности , используемому для проверки ошибок в данных, сгенерированных компьютером. Она состоит из одной или нескольких цифр (или букв), вычисленных алгоритмом из других цифр (или букв) в последовательности ввода. [1]
С помощью контрольной цифры можно обнаружить простые ошибки при вводе последовательности символов (обычно цифр), например, одну неправильно набранную цифру или некоторые перестановки двух последовательных цифр.
Алгоритмы контрольной цифры обычно предназначены для обнаружения ошибок транскрипции человеком . В порядке сложности они включают следующее: [2]
При выборе системы высокая вероятность обнаружения ошибок идет вразрез со сложностью реализации; простые системы контрольных цифр легко понимаются и реализуются людьми, но не обнаруживают столько ошибок, как сложные, для реализации которых требуются сложные программы.
Желательной особенностью является то, что левое заполнение нулями не должно изменять контрольную цифру. Это позволяет использовать числа переменной длины и изменять длину. Если к исходному числу добавляется одна контрольная цифра, система не всегда будет фиксировать множественные ошибки, например, две ошибки замены (12 → 34), хотя, как правило, двойные ошибки будут фиксироваться в 90% случаев (оба изменения должны будут изменить вывод путем смещения сумм).
Очень простой метод проверки цифр — взять сумму всех цифр ( цифровая сумма ) по модулю 10. Это позволит обнаружить любую ошибку в одной цифре, поскольку такая ошибка всегда изменит сумму, но не позволит обнаружить ошибки транспонирования (перестановки двух цифр), поскольку перестановка не меняет сумму.
Немного более сложный метод заключается в том, чтобы взять взвешенную сумму цифр по модулю 10 с разными весами для каждой позиции числа.
Чтобы проиллюстрировать это, например, если веса для четырехзначного числа равны 5, 3, 2, 7, а число, которое нужно закодировать, равно 4871, то следует взять 5×4 + 3×8 + 2×7 + 7×1 = 65, т. е. 65 по модулю 10, а контрольная цифра будет равна 5, что дает 48715.
Широко используются системы с весами 1, 3, 7 или 9, причем веса соседних чисел различны: например, веса 31 31 в кодах UPC , веса 13 13 в номерах EAN (алгоритм GS1) и веса 371 371 371, используемые в транзитных номерах банковской маршрутизации США . Эта система обнаруживает все ошибки в одной цифре и около 90% [ требуется ссылка ] ошибок транспозиции. 1, 3, 7 и 9 используются, поскольку они взаимно просты с 10, поэтому изменение любой цифры изменяет контрольную цифру; использование коэффициента, делящегося на 2 или 5, приведет к потере информации (потому что 5×0 = 5×2 = 5×4 = 5×6 = 5×8 = 0 по модулю 10) и, таким образом, не выявит некоторые ошибки в одной цифре. Использование разных весов в соседних числах означает, что большинство транспозиций изменяют контрольную цифру; Однако, поскольку все веса отличаются на четное число, это не позволяет обнаружить перестановки двух цифр, отличающихся на 5 (0 и 5, 1 и 6, 2 и 7, 3 и 8, 4 и 9), поскольку 2 и 5 умножаются, чтобы дать 10.
Вместо этого код ISBN-10 использует модуль 11, который является простым числом, и все позиции чисел имеют разные веса 1, 2, ... 10. Таким образом, эта система обнаруживает все ошибки замены и транспозиции однозначных цифр (включая транспозиции скачков), но ценой того, что контрольная цифра может быть 10, представленная как «X». (Альтернативой является простое избежание использования серийных номеров, которые приводят к контрольной цифре «X».) Вместо этого ISBN-13 использует алгоритм GS1, используемый в номерах EAN.
Более сложные алгоритмы включают алгоритм Луна (1954), который улавливает 98% ошибок транспозиции однозначных цифр (он не обнаруживает 90 ↔ 09) и еще более сложный алгоритм Верхоффа (1969), который улавливает все ошибки замены и транспозиции однозначных цифр, а также многие (но не все) более сложные ошибки. Похожий метод основан на абстрактной алгебре , алгоритм Дамма (2004), который также обнаруживает все ошибки однозначных цифр и все смежные ошибки транспозиции. Эти три метода используют одну контрольную цифру и, следовательно, не смогут уловить около 10% [ требуется ссылка ] более сложных ошибок. Чтобы уменьшить этот процент отказов, необходимо использовать более одной контрольной цифры (например, проверка по модулю 97, упомянутая ниже, которая использует две контрольные цифры — для алгоритма см. Международный номер банковского счета ) и/или использовать более широкий диапазон символов в контрольной цифре, например буквы плюс цифры.
Последняя цифра универсального кода продукта , международного номера товара , глобального номера местоположения или глобального номера торговой единицы является контрольной цифрой, которая вычисляется следующим образом: [3] [4]
Калькулятор контрольной цифры GS1 и подробная документация доступны на веб-сайте GS1. [5] Другая официальная страница калькулятора показывает, что механизм для GTIN-13 такой же, как и для глобального номера местоположения /GLN. [6]
Например, штрих-код UPC-A для коробки салфеток — «036000241457». Последняя цифра — это контрольная цифра «7», и если остальные цифры верны, то расчет контрольной цифры должен дать 7.
Другой пример: вычислить контрольную цифру для следующего продукта питания «01010101010 x ».
Последний символ десятизначного Международного стандартного номера книги — это контрольная цифра, вычисляемая таким образом, что умножение каждой цифры на ее позицию в номере (считая справа) и взятие суммы этих произведений по модулю 11 дает 0. Самая правая цифра (которая умножается на 1) — это контрольная цифра, выбранная для того, чтобы сделать сумму правильной. Возможно, ей потребуется значение 10, которое представлено как буква X. Например, возьмем ISBN 0-201-53082-1 : сумма произведений составляет 0×10 + 2×9 + 0×8 + 1×7 + 5×6 + 3×5 + 0×4 + 8×3 + 2×2 + 1×1 = 99 ≡ 0 (mod 11). Таким образом, ISBN действителен. Позиции также можно подсчитывать слева направо, в этом случае контрольная цифра умножается на 10 для проверки достоверности: 0×1 + 2×2 + 0×3 + 1×4 + 5×5 + 3×6 + 0×7 + 8×8 + 2×9 + 1×10 = 143 ≡ 0 (mod 11).
ISBN 13 (используется с января 2007 г.) соответствует коду EAN-13, который находится под штрих-кодом книги. Его контрольная цифра генерируется так же, как и UPC. [7]
Алгоритм контрольных цифр NOID (NCDA), [8] используемый с 2004 года, предназначен для применения в постоянных идентификаторах и работает со строками букв и цифр переменной длины, называемыми расширенными цифрами. Он широко используется со схемой идентификатора ARK и в некоторой степени используется со схемами, такими как Handle System и DOI . Расширенная цифра ограничена бета-цифровыми символами, которые являются буквами, цифрами, за исключением гласных и буквы «l» (ell). Это ограничение помогает при генерации непрозрачных строк, которые вряд ли будут образовывать слова случайно и не будут содержать как O, так и 0 или l и 1. Имея простое основание R=29, бета-цифровой репертуар позволяет алгоритму гарантировать обнаружение ошибок с одним символом и транспозицией [9] для строк длиной менее R=29 символов (за пределами которого он обеспечивает немного более слабую проверку). Алгоритм обобщается на любой репертуар символов с простым основанием R и строками длиной менее R символов.
Известные алгоритмы включают в себя: