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

Модуль 97

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

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

Необходимость в надёжном методе проверки номеров счетов возникла с развитием международных банковских переводов. В конце 1980-х — начале 1990-х годов Международная организация по стандартизации (ISO) разработала стандарт ISO 13616, определяющий структуру международного номера банковского счёта (IBAN). Ключевым требованием к IBAN стала возможность автоматической проверки номера до отправки платежа, чтобы снизить количество ошибочных транзакций.

В качестве базового алгоритма проверки был выбран модуль 97 (mod 97), уже зарекомендовавший себя в национальных системах, в частности в немецкой системе проверки номеров счетов (Kontonummer). Выбор числа 97 объясняется тем, что оно является простым и достаточно большим, чтобы обеспечить высокую вероятность обнаружения ошибок, но при этом удобным для вычислений (97 меньше 100, что упрощает ручную проверку).

Стандарт ISO 13616 был принят в 1997 году, а в 2003 году — обновлён. В Евросоюзе и странах Европейской экономической зоны использование IBAN и проверки по модулю 97 стало обязательным для всех межбанковских переводов с 2007 года (SEPAЕдиная зона платежей в евро). В России IBAN применяется для международных переводов, а для внутренних расчётов используется собственная система с контрольным ключом по модулю 97, определённая Положением Банка России № 579-П.

Алгоритм расчёта

Проверка по модулю 97 для IBAN основана на преобразовании буквенно-цифрового номера в целое число и вычислении остатка от деления этого числа на 97. Если остаток равен 1, номер считается корректным.

Процедура проверки (для IBAN)

  1. Удаление пробелов: Из номера IBAN удаляются все пробелы и небуквенно-цифровые символы.
  2. Перестановка: Первые четыре символа (код страны и контрольные цифры) переносятся в конец строки.
  3. Замена букв: Каждая буква латинского алфавита заменяется на двузначное число: A=10, B=11, ..., Z=35.
  4. Вычисление остатка: Полученное длинное число делится на 97. Остаток от деления (mod 97) должен быть равен 1.
  5. Интерпретация: Если остаток = 1 — номер корректен. В противном случае — ошибка ввода или недействительный счёт.

Пример

Для гипотетического IBAN GB82 WEST 1234 5698 7654 32:

  1. После удаления пробелов: GB82WEST12345698765432
  2. Перестановка: WEST12345698765432GB82
  3. Замена букв:
  • W=32, E=14, S=28, T=29, G=16, B=11
  • Получаем: 3214282912345698765432161182
  1. Вычисление: 3214282912345698765432161182 mod 97 = 1 (корректно).

Расчёт контрольных цифр

При создании нового IBAN контрольные цифры (позиции 3–4) рассчитываются по тому же алгоритму, но с обратной логикой. Сначала формируется номер с временными контрольными цифрами (например, 00), затем вычисляется остаток от деления. Контрольные цифры получаются по формуле: 98 - (остаток). Если результат меньше 10, перед ним добавляется ноль.

Применение

Международные банковские счета (IBAN)

Основное применение — проверка номеров IBAN в платежных системах (SWIFT, SEPA, системы стран СНГ). Алгоритм реализован во всех банковских программах, интернет-банках и платёжных шлюзах. Он позволяет отсеять до 98% опечаток при вводе номера счёта вручную.

Российские банковские счета (внутренние)

В России для внутренних расчётов используется номер лицевого счёта (20 знаков) и номер корреспондентского счёта (20 знаков). Контрольный ключ (третий разряд счёта) рассчитывается по алгоритму, основанному на модуле 97, но с весовыми коэффициентами, определёнными Банком России. Алгоритм учитывает номер счёта, БИК банка и код валюты. Проверка обязательна при открытии счёта и при обработке платёжных поручений.

Другие идентификаторы

Алгоритм mod 97 также используется в:

  • Международном номере банковского идентификатора (BIC/SWIFT) — для проверки кода филиала (branch code).
  • Номерах паспортов и удостоверений личности в некоторых странах (например, в Германии — Personalausweisnummer).
  • Номерах социального страхования (SSN) в отдельных государствах.
  • Идентификаторах юридических лиц (LEI) — для проверки последних двух символов.

Классификация ошибок, обнаруживаемых модулем 97

Модуль 97 относится к классу детерминированных контрольных сумм. Он гарантированно обнаруживает:

Тип ошибкиОписаниеВероятность обнаружения
Одиночная ошибкаЗамена одного символа на другой100% (если не меняет номер на другой корректный)
Перестановка соседних символовОбмен местами двух соседних цифр или букв100% (кроме случаев, когда перестановка даёт другой корректный номер)
Перестановка не соседних символовОбмен местами двух символов, разделённых одним или несколькими другими~97% (зависит от расстояния)
Вставка/удаление символаДобавление или пропуск одного знака~97%
Двойная ошибкаДве независимые ошибки в одном номере~97%

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

Несмотря на широкое распространение, алгоритм mod 97 имеет ряд ограничений:

  • Не является криптографической хеш-функцией: Он не защищает от преднамеренной подделки номера. Злоумышленник, зная алгоритм, может подобрать другой номер с той же контрольной суммой.
  • Чувствительность к регистру: Стандарт IBAN предписывает использовать только заглавные буквы. Ввод строчных букв может привести к ошибке проверки, если программное обеспечение не выполняет автоматическое преобразование регистра.
  • Не обнаруживает все перестановки: Алгоритм не гарантирует обнаружение перестановок, при которых разность чисел кратна 97. Например, перестановка цифр 0 и 1 в некоторых позициях может остаться незамеченной.
  • Зависимость от правильной реализации: Ошибки в программной реализации (например, переполнение целочисленной арифметики при работе с очень длинными числами) могут привести к ложным срабатываниям или пропуску ошибок.

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

  • Число 97 выбрано не случайно: оно является простым числом, а также наибольшим двузначным простым числом, что обеспечивает максимальную теоретическую вероятность обнаружения ошибок для двузначной контрольной суммы (1/97 ≈ 1,03% необнаруженных ошибок).
  • В некоторых странах (например, в Германии) до введения IBAN использовалась собственная система проверки номеров счетов с другими модулями (11, 10, 7), что создавало сложности при автоматизации международных переводов.
  • Алгоритм mod 97 настолько прост, что может быть выполнен вручную с помощью карандаша и бумаги, что было важно в эпоху до всеобщей компьютеризации банков.

Источники

  • ISO 13616:1997 — Financial services — International bank account number (IBAN).
  • ISO 13616-1:2007 — Financial services — International bank account number (IBAN) — Part 1: Structure.
  • Положение Банка России от 27.02.2017 № 579-П «О Плане счетов бухгалтерского учета для кредитных организаций и порядке его применения».
  • European Committee for Banking Standards (ECBS) — IBAN Implementation Guidelines.
  • Рекомендации SWIFT по проверке IBAN.

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

На главную BFOmetr →