Контрольное число
Контрольное число (также контрольная цифра, контрольная сумма, проверочный символ) — это дополнительный знак (цифра, буква или последовательность символов), вычисляемый по определённому алгоритму на основе исходных данных и добавляемый к ним для обнаружения ошибок при передаче, хранении или вводе информации. Контрольное число позволяет с высокой вероятностью выявить случайные искажения, опечатки, пропуски или перестановки символов, но не предназначено для исправления ошибок. Оно широко применяется в идентификационных номерах, банковских реквизитах, штрихкодах, серийных номерах и цифровых подписях.
История
Идея использования избыточности для контроля целостности данных восходит к середине XX века. С развитием вычислительной техники и телекоммуникаций возникла необходимость в простых и эффективных методах обнаружения ошибок. Одним из первых массовых применений контрольных чисел стали банковские счета и номера ценных бумаг, где ручной ввод был особенно подвержен ошибкам. В 1960-х годах были разработаны алгоритмы, такие как модуль 10 (алгоритм Луна) и модуль 11, которые до сих пор лежат в основе многих стандартов. С распространением штрихового кодирования в 1970-х годах контрольные цифры стали обязательным элементом для систем автоматической идентификации товаров.
Принцип работы
Контрольное число вычисляется по строго определённому правилу, которое называется алгоритмом проверки. Обычно алгоритм включает следующие шаги:
- Взятие исходной последовательности символов (например, цифр номера).
- Применение весовых коэффициентов к каждому символу (каждая позиция имеет свой вес, часто повторяющийся циклически).
- Вычисление суммы произведений символов на их веса.
- Взятие остатка от деления полученной суммы на некоторое число (модуль), чаще всего 10 или 11.
- Формирование контрольного знака на основе остатка. Если остаток равен нулю, контрольное число часто принимается за 0. В некоторых алгоритмах (например, модуль 11) остаток может быть преобразован в цифру или букву (например, X для значения 10).
При проверке правильности номера алгоритм повторяется для всей последовательности, включая контрольное число. Если остаток от деления итоговой суммы на модуль равен нулю, номер считается корректным. В противном случае фиксируется ошибка.
Виды и применение
Идентификационные номера
- ИНН (Идентификационный номер налогоплательщика) в России. Для 10-значного ИНН юридического лица используется контрольное число, вычисляемое по модулю 11 с весами 2, 4, 10, 3, 5, 9, 4, 6, 8. Для 12-значного ИНН физического лица применяются два контрольных числа: первое — по модулю 11 для первых 10 цифр, второе — по модулю 11 для первых 11 цифр.
- СНИЛС (Страховой номер индивидуального лицевого счёта). Контрольное число вычисляется по модулю 101. Номер считается верным, если остаток от деления суммы произведений цифр на их веса (от 1 до 9) на 101 меньше 100. Если остаток равен 100 или 101, контрольное число равно 0.
- ОКПО (Общероссийский классификатор предприятий и организаций). Использует контрольное число по модулю 11.
- Номера банковских карт (PAN). Алгоритм Луна (Luhn algorithm), также известный как «mod 10». Он используется для проверки корректности номера карты Visa, Mastercard, Maestro, «Мир» и других. Алгоритм удваивает каждую вторую цифру справа налево, суммирует все цифры (включая цифры удвоенных чисел) и проверяет, делится ли сумма на 10. Этот алгоритм не является криптографическим, но эффективно выявляет одиночные ошибки и перестановки соседних цифр.
- IBAN (International Bank Account Number). Международный номер банковского счета включает две контрольные цифры, вычисляемые по модулю 97. Они защищают от ошибок при межбанковских переводах.
Штрихкоды и товарные коды
- EAN-13 (европейский 13-значный штрихкод). Последняя цифра является контрольной. Алгоритм: суммируются цифры на чётных и нечётных позициях с весами 1 и 3 соответственно; контрольная цифра дополняет сумму до ближайшего числа, кратного 10.
- UPC (Universal Product Code) — 12-значный штрихкод, используемый в США и Канаде. Контрольная цифра вычисляется аналогично EAN-13.
- ISBN (International Standard Book Number). 13-значный ISBN (с 2007 года) использует алгоритм, аналогичный EAN-13. Ранее 10-значный ISBN применял модуль 11 с весами от 10 до 2, где контрольной цифрой могла быть буква X (для значения 10).
Документы и транспорт
- Номер паспорта гражданина РФ. В серии и номере паспорта (10 цифр) контрольное число не используется явно, но применяется в машиночитаемой зоне (MRZ) для проверки целостности данных.
- VIN (Vehicle Identification Number) — 17-значный идентификационный номер автомобиля. Контрольная цифра (9-я позиция) вычисляется по сложному алгоритму, включающему весовые коэффициенты для каждой позиции и модуль 11. Она защищает от подделки VIN и ошибок при вводе.
- Коды авиакомпаний и номера рейсов. Контрольные цифры используются в системах бронирования и регистрации (например, код PNR — Passenger Name Record).
Криптография и цифровые подписи
Контрольные числа являются упрощённой формой контрольных сумм. В более сложных системах (например, в хеш-функциях MD5, SHA-1, SHA-256) используются криптографические контрольные суммы, которые не только обнаруживают случайные ошибки, но и защищают от преднамеренного изменения данных. Однако классическое «контрольное число» в узком смысле не является криптографическим инструментом.
Алгоритмы вычисления
Алгоритм Луна (mod 10)
Самый распространённый алгоритм для номеров банковских карт и некоторых других идентификаторов.
- Цифры нумеруются справа налево, начиная с 1.
- Каждая цифра на нечётной позиции (1, 3, 5…) умножается на 2.
- Если результат умножения больше 9, из него вычитается 9 (или складываются его цифры).
- Все цифры (включая неизменённые на чётных позициях) суммируются.
- Контрольная цифра — это число, которое делает сумму кратной 10.
Алгоритм mod 11
Используется в ИНН, ОКПО, VIN и других системах.
- Каждой цифре присваивается весовой коэффициент, который может изменяться в зависимости от позиции (часто от 2 до 9, затем повтор).
- Вычисляется сумма произведений цифр на веса.
- Берётся остаток от деления суммы на 11.
- Если остаток равен 10, контрольное число может быть равно 0 или букве X (в зависимости от стандарта).
Алгоритм mod 97
Используется в IBAN и некоторых международных банковских кодах.
- Строка цифр преобразуется в большое целое число.
- Вычисляется остаток от деления этого числа на 97.
- Контрольные цифры дополняют остаток до 98 (или 97, в зависимости от стандарта).
Ошибки, выявляемые контрольным числом
Контрольное число эффективно обнаруживает следующие типы ошибок, возникающих при ручном вводе или передаче данных:
- Одиночная ошибка (замена одной цифры на другую) — выявляется практически во всех алгоритмах.
- Транспозиция (перестановка двух соседних цифр) — выявляется в алгоритмах с различными весами (например, Луна, mod 11).
- Пропуск или добавление цифры — выявляется, если алгоритм учитывает позицию символа.
- Двойная ошибка (замена двух цифр) — выявляется с меньшей вероятностью, но часто фиксируется.
Критика и ограничения
- Не является криптографической защитой. Контрольное число не предотвращает преднамеренную подделку номера, так как алгоритм вычисления обычно известен. Злоумышленник может легко сгенерировать корректное контрольное число для произвольного номера.
- Не исправляет ошибки. В отличие от кодов Рида-Соломона или кодов Хэмминга, контрольное число только сигнализирует о наличии ошибки, но не указывает, в какой именно позиции она произошла.
- Ограниченная обнаруживающая способность. Некоторые алгоритмы (например, простой mod 10 без весов) не выявляют перестановки цифр (например, 12 и 21 дадут одинаковую сумму). Алгоритм Луна не обнаруживает ошибку, если две цифры одновременно изменяются так, что их сумма остаётся той же (например, 5→6 и 4→3).
- Сложность для пользователя. Ввод контрольного числа вручную (например, при регистрации) может быть неудобен, особенно если оно содержит буквы (как в старом ISBN).
Источники
- ГОСТ Р 7.0.100-2018 «Система стандартов по информации, библиотечному и издательскому делу. Библиографическая запись. Библиографическое описание. Общие требования и правила составления» (раздел о контрольных цифрах ISBN).
- ISO/IEC 7812-1:2017 «Identification cards — Identification of issuers — Part 1: Numbering system» (алгоритм Луна для номеров банковских карт).
- ГОСТ Р 51511-2001 «Карты идентификационные. Нумерация эмитентов и держателей карт».
- Положение Банка России № 383-П от 19.06.2012 «О правилах осуществления перевода денежных средств» (контрольные цифры IBAN).
- Стандарт EAN/UCC-13 (GS1 General Specifications).
- «Алгоритмы контрольных сумм» — учебные пособия по теории информации и кодированию (В. А. Залогин, А. В. Смирнов).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →