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

Алгоритм ISO 7064

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

История и стандартизация

Разработка алгоритмов, лежащих в основе ISO 7064, была инициирована Международной организацией по стандартизации (ISO) в конце 1970-х — начале 1980-х годов. Целью стало создание универсального, математически обоснованного метода, который мог бы применяться в различных отраслях, не завися от конкретной системы счисления или алфавита. Первая версия стандарта была опубликована в 1983 году под названием ISO 7064:1983 «Data processing — Check character systems». Впоследствии он был пересмотрен и расширен. Действующая редакция — ISO 7064:2003 «Information technology — Security techniques — Check character systems», которая также была принята в России как национальный стандарт ГОСТ Р ИСО/МЭК 7064-2008.

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

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

Алгоритмы ISO 7064 основаны на модульной арифметике. Каждому символу (цифре или букве) присваивается числовое значение. Затем вся строка обрабатывается как число в некоторой системе счисления, и остаток от деления этого числа на определённый модуль (простое число или степень двойки) используется для вычисления контрольного символа. В отличие от простых контрольных сумм (например, XOR), эти алгоритмы специально спроектированы для обнаружения наиболее частых ошибок человека: одиночная замена символа, перестановка двух соседних символов, вставка или пропуск символа.

Классификация алгоритмов по ISO 7064

Стандарт определяет несколько типов алгоритмов, различающихся по используемому алфавиту, длине строки и математической основе. Основные группы:

Алгоритмы с чисто цифровым алфавитом (0–9)

Эти алгоритмы работают только с десятичными цифрами. Они наиболее распространены в банковских системах.

  • ISO 7064 MOD 10-1: Использует модуль 10 и весовые коэффициенты (обычно 1, 2, 1, 2...). Контрольная цифра вычисляется как дополнение до 10 от суммы произведений цифр на веса. Этот алгоритм лежит в основе Luhn-алгоритма, который применяется для проверки номеров кредитных карт (Visa, Mastercard), IMEI-кодов телефонов и некоторых других идентификаторов.
  • ISO 7064 MOD 11-2: Использует модуль 11 и веса, являющиеся степенями двойки (2, 4, 8, 16...). Контрольная цифра может быть числом от 0 до 10, причём значение 10 кодируется символом «X». Этот алгоритм используется в ISBN-10 (международный стандартный книжный номер) и некоторых банковских номерах.
  • ISO 7064 MOD 97-10: Использует модуль 97. Контрольное число (две цифры) вычисляется как остаток от деления числа, образованного исходной строкой, на 97. Этот метод применяется в IBAN (международный номер банковского счёта) и российских номерах счетов (расчётный счёт, корр. счёт).

Алгоритмы с буквенно-цифровым алфавитом (0–9, A–Z)

Эти алгоритмы позволяют обрабатывать строки, содержащие как цифры, так и заглавные латинские буквы. Каждой букве ставится в соответствие числовое значение (A=10, B=11, ..., Z=35).

  • ISO 7064 MOD 37-2: Аналог MOD 11-2, но с модулем 37 и алфавитом из 36 символов (10 цифр + 26 букв). Контрольный символ может быть цифрой или буквой. Используется в некоторых системах идентификации товаров и документов.
  • ISO 7064 MOD 36-2: Использует модуль 36, что позволяет обойтись без символа «X» для значения 10, так как в 36-ричной системе все значения от 0 до 35 представляются одним символом. Применяется в некоторых системах контроля номеров паспортов и водительских удостоверений.

Применение в различных системах

Банковская сфера

  • IBAN (International Bank Account Number): Российский IBAN (счёт в формате РФ) использует алгоритм MOD 97-10. Контрольные цифры (две цифры в номере) позволяют банкам-корреспондентам быстро проверить корректность номера счёта до отправки платежа.
  • Номера банковских карт: Алгоритм Luhn (MOD 10-1) встроен в последнюю цифру номера карты. Это позволяет терминалам и банкоматам выявить опечатку на раннем этапе.
  • БИК (Банковский идентификационный код): В России БИК не имеет встроенной контрольной суммы по ISO 7064, но его корректность часто проверяется косвенно через другие алгоритмы.

Идентификация документов

  • ISBN (International Standard Book Number): Для книг, изданных до 2007 года, использовался ISBN-10 с алгоритмом MOD 11-2. Современный ISBN-13 использует алгоритм MOD 10-1 (аналогично EAN-13).
  • ИНН (Индивидуальный номер налогоплательщика) в России: ИНН физического лица (12 цифр) содержит две контрольные цифры, вычисляемые по алгоритму, близкому к MOD 11-2, но с фиксированными весами. ИНН юридического лица (10 цифр) — одну контрольную цифру.
  • СНИЛС (Страховой номер индивидуального лицевого счёта) в России: Контрольное число СНИЛС вычисляется по алгоритму, не входящему в ISO 7064, но близкому по духу (модуль 101, веса от 1 до 9).

Логистика и торговля

  • EAN-13 (European Article Number): Штрихкод на товарах. Последняя цифра — контрольная, вычисляемая по алгоритму MOD 10-1.
  • IMEI (International Mobile Equipment Identity): Уникальный номер мобильного телефона. Последняя цифра — контрольная по Luhn.

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

Несмотря на широкую распространённость, алгоритмы ISO 7064 имеют ограничения:

  1. Не защищают от злонамеренных искажений: Алгоритм предназначен для обнаружения случайных ошибок, а не для криптографической защиты. Зная алгоритм, злоумышленник может подобрать корректный контрольный символ для произвольного номера.
  2. Ограниченная длина строки: Для некоторых алгоритмов (например, MOD 11-2) существует максимальная длина строки, при которой гарантируется обнаружение всех одиночных ошибок. При превышении длины вероятность ошибки возрастает.
  3. Сложность реализации для буквенно-цифровых строк: Алгоритмы с алфавитом 0–9, A–Z требуют преобразования букв в числа, что может быть неудобно в системах, работающих только с цифрами.

Интересные факты

  • Алгоритм Luhn (MOD 10-1) был запатентован в 1960 году американским учёным Гансом Питером Луном и первоначально использовался в механических устройствах для проверки номеров чеков.
  • В стандарте ISO 7064:2003 описаны не только алгоритмы, но и процедуры тестирования на устойчивость к ошибкам, что позволяет разработчикам выбирать наиболее подходящий метод для конкретной задачи.
  • В России алгоритм MOD 97-10 используется для проверки корректности номера счёта в платёжных поручениях, что является обязательным требованием Банка России.

Источники

  1. ISO 7064:2003 — Information technology — Security techniques — Check character systems.
  2. ГОСТ Р ИСО/МЭК 7064-2008 — Информационная технология. Методы обеспечения безопасности. Системы контрольных символов.
  3. Положение Банка России от 27 февраля 2017 года № 579-П «О плане счетов бухгалтерского учета для кредитных организаций и порядке его применения».
  4. Приказ ФНС России от 29.10.2014 № ММВ-7-3/558@ «Об утверждении Порядка формирования и применения контрольных чисел при присвоении ИНН».

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

На главную BFOmetr →