Открыть сервис

Контрольное число

Контрольное число (также контрольная цифра, контрольная сумма, проверочный символ) — это дополнительный знак (цифра, буква или последовательность символов), вычисляемый по определённому алгоритму на основе исходных данных и добавляемый к ним для обнаружения ошибок при передаче, хранении или вводе информации. Контрольное число позволяет с высокой вероятностью выявить случайные искажения, опечатки, пропуски или перестановки символов, но не предназначено для исправления ошибок. Оно широко применяется в идентификационных номерах, банковских реквизитах, штрихкодах, серийных номерах и цифровых подписях.

История

Идея использования избыточности для контроля целостности данных восходит к середине XX века. С развитием вычислительной техники и телекоммуникаций возникла необходимость в простых и эффективных методах обнаружения ошибок. Одним из первых массовых применений контрольных чисел стали банковские счета и номера ценных бумаг, где ручной ввод был особенно подвержен ошибкам. В 1960-х годах были разработаны алгоритмы, такие как модуль 10 (алгоритм Луна) и модуль 11, которые до сих пор лежат в основе многих стандартов. С распространением штрихового кодирования в 1970-х годах контрольные цифры стали обязательным элементом для систем автоматической идентификации товаров.

Принцип работы

Контрольное число вычисляется по строго определённому правилу, которое называется алгоритмом проверки. Обычно алгоритм включает следующие шаги:

  1. Взятие исходной последовательности символов (например, цифр номера).
  2. Применение весовых коэффициентов к каждому символу (каждая позиция имеет свой вес, часто повторяющийся циклически).
  3. Вычисление суммы произведений символов на их веса.
  4. Взятие остатка от деления полученной суммы на некоторое число (модуль), чаще всего 10 или 11.
  5. Формирование контрольного знака на основе остатка. Если остаток равен нулю, контрольное число часто принимается за 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.
  2. Каждая цифра на нечётной позиции (1, 3, 5…) умножается на 2.
  3. Если результат умножения больше 9, из него вычитается 9 (или складываются его цифры).
  4. Все цифры (включая неизменённые на чётных позициях) суммируются.
  5. Контрольная цифра — это число, которое делает сумму кратной 10.

Алгоритм mod 11

Используется в ИНН, ОКПО, VIN и других системах.

  1. Каждой цифре присваивается весовой коэффициент, который может изменяться в зависимости от позиции (часто от 2 до 9, затем повтор).
  2. Вычисляется сумма произведений цифр на веса.
  3. Берётся остаток от деления суммы на 11.
  4. Если остаток равен 10, контрольное число может быть равно 0 или букве X (в зависимости от стандарта).

Алгоритм mod 97

Используется в IBAN и некоторых международных банковских кодах.

  1. Строка цифр преобразуется в большое целое число.
  2. Вычисляется остаток от деления этого числа на 97.
  3. Контрольные цифры дополняют остаток до 98 (или 97, в зависимости от стандарта).

Ошибки, выявляемые контрольным числом

Контрольное число эффективно обнаруживает следующие типы ошибок, возникающих при ручном вводе или передаче данных:

  • Одиночная ошибка (замена одной цифры на другую) — выявляется практически во всех алгоритмах.
  • Транспозиция (перестановка двух соседних цифр) — выявляется в алгоритмах с различными весами (например, Луна, mod 11).
  • Пропуск или добавление цифры — выявляется, если алгоритм учитывает позицию символа.
  • Двойная ошибка (замена двух цифр) — выявляется с меньшей вероятностью, но часто фиксируется.

Критика и ограничения

  • Не является криптографической защитой. Контрольное число не предотвращает преднамеренную подделку номера, так как алгоритм вычисления обычно известен. Злоумышленник может легко сгенерировать корректное контрольное число для произвольного номера.
  • Не исправляет ошибки. В отличие от кодов Рида-Соломона или кодов Хэмминга, контрольное число только сигнализирует о наличии ошибки, но не указывает, в какой именно позиции она произошла.
  • Ограниченная обнаруживающая способность. Некоторые алгоритмы (например, простой mod 10 без весов) не выявляют перестановки цифр (например, 12 и 21 дадут одинаковую сумму). Алгоритм Луна не обнаруживает ошибку, если две цифры одновременно изменяются так, что их сумма остаётся той же (например, 5→6 и 4→3).
  • Сложность для пользователя. Ввод контрольного числа вручную (например, при регистрации) может быть неудобен, особенно если оно содержит буквы (как в старом ISBN).

Источники

  1. ГОСТ Р 7.0.100-2018 «Система стандартов по информации, библиотечному и издательскому делу. Библиографическая запись. Библиографическое описание. Общие требования и правила составления» (раздел о контрольных цифрах ISBN).
  2. ISO/IEC 7812-1:2017 «Identification cards — Identification of issuers — Part 1: Numbering system» (алгоритм Луна для номеров банковских карт).
  3. ГОСТ Р 51511-2001 «Карты идентификационные. Нумерация эмитентов и держателей карт».
  4. Положение Банка России № 383-П от 19.06.2012 «О правилах осуществления перевода денежных средств» (контрольные цифры IBAN).
  5. Стандарт EAN/UCC-13 (GS1 General Specifications).
  6. «Алгоритмы контрольных сумм» — учебные пособия по теории информации и кодированию (В. А. Залогин, А. В. Смирнов).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →