Техническая документация

Как работает валидация
IBAN: руководство

Финансовая точность в каждой транзакции. Разбираем стандарт, алгоритм Mod-97, структуру BBAN и практические примеры интеграции.

Пример валидации IBAN в интерфейсе Regexly
Введение

Зачем валидировать IBAN и цена ошибки?

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

Архитектура

Структура IBAN: разбор по частям

IBAN состоит из 34 символов (максимальная длина) и имеет фиксированную структуру, регламентируемую ISO 13616. Он включает в себя:

CC (2 знака)

Код страны регистрации счета. Например, DE для Германии, FR для Франции.

CK (2 знака)

Контрольная сумма. Используется для проверки правильности номера с помощью алгоритма Mod-97.

BBAN (до 30 знаков)

Основной номер банковского счета. Содержит информацию о банке и клиенте, формат которой уникален для каждой страны.

Пример: DE89370400440532013000
DE (Страна) + 89 (Контрольная сумма) + 370400440532013000 (BBAN)

DE
+
89
+
370400440532013000
Алгоритм

Магия Mod-97: как работает контрольная сумма

Контрольная сумма IBAN рассчитывается по алгоритму Mod-97. Это не обычная сумма цифр, а сложная математическая операция, которая гарантирует, что номер не был изменен случайно.

Алгоритм проверки:

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

Условие валидности: Остаток от деления должен быть равен 1.

// Пример: DE89 3704 0044 0532 0130 00
// 1. Удалить пробелы
DE89370400440532013000
// 2. Переместить первые 4 в конец
89370400440532013000DE
// 3. Конвертировать буквы (D=13, E=14, ...)
893704004405320130001314...
// 4. Делим на 97, остаток должен быть 1
✓ Результат: 1 (Валидно)
Данные

Покрытие по странам и форматы

IBAN используется в 40 странах. Длина и структура BBAN сильно варьируются.

Страна Код Длина IBAN BBAN
Германия DE 22 20 цифр
Франция FR 27 23 цифры
Великобритания GB 22 18 цифр
Италия IT 27 23 цифры
Испания ES 24 20 цифр
Нидерланды NL 18 14 цифр
Regexly API

Почему Regexly лучше, чем регулярные выражения

Mod-97 проверка

Регулярные выражения могут проверить формат (например, 22 символа), но не могут математически подтвердить контрольную сумму. Regexly выполняет полный алгоритм Mod-97 на сервере.

Международное покрытие

У нас есть правила валидации для всех 40 стран-участниц. Мы поддерживаем редкие форматы, такие как Беларусь (BY) или Казахстан (KZ), которые сложны для самостоятельной реализации.

Онлайн-базы данных

Regexly проверяет действительность банка (BIC/SWIFT) в реальном времени. Мы убеждаемся, что счет действительно принадлежит указанному банку, а не является фейковым.

Примеры кода

Интеграция валидации IBAN

Ниже приведены примеры реализации алгоритма проверки на Python и JavaScript.

Python

import re

def validate_iban(iban_str):
    iban = iban_str.upper().replace(" ", "")
    
    # Проверка длины (минимум 15 символов)
    if not re.match("^[A-Z]{2}[0-9]{2}[A-Z0-9]+$", iban):
        return False
        
    # Перемещение первых 4 символов в конец
    iban = iban[4:] + iban[:4]
    
    # Конвертация букв в числа
    iban_translated = ""
    for char in iban:
        if char.isdigit():
            iban_translated += char
        else:
            iban_translated += str(ord(char) - 55)
    
    # Mod-97 проверка
    remainder = int(iban_translated) % 97
    return remainder == 1

# Тест
print(validate_iban("DE89370400440532013000")) # True

JavaScript (ES6)

const validateIBAN = (iban) => {
    // 1. Удалить пробелы и перевести в верхний регистр
    iban = iban.replace(/\s/g, '').toUpperCase();
    
    // 2. Проверка формата (2 буквы, 2 цифры, остальные символы)
    if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]+$/.test(iban)) {
        return false;
    }
    
    // 3. Переместить первые 4 символа
    const moved = iban.slice(4) + iban.slice(0, 4);
    
    // 4. Заменить буквы на числа (A=10...)
    const converted = moved.replace(/[A-Z]/g, char => char.charCodeAt(0) - 55);
    
    // 5. Mod-97
    return BigInt(converted) % 97n === 1n;
};

// Тест
console.log(validateIBAN('GB82WEST12345698765432')); // true

Типичные ошибки и edge cases

  • Неверная длина: Для Германии IBAN всегда 22 символа, для Испании — 24. Длина зависит от страны.
  • Неверная контрольная сумма: Даже при правильной длине и стране, цифры могут быть неверными.
  • Смешанный регистр: Буквы IBAN должны быть заглавными (A-Z).
  • Недопустимые символы: Использование пробелов, дефисов или подчеркиваний внутри кода.
  • Несуществующий банк: Контрольная сумма может быть валидной, но банк может быть закрыт.

Для промышленной эксплуатации Regexly API обрабатывает всю логику Mod-97 и проверку BIC в одном запросе, что исключает риск человеческой ошибки.

⚠️

Срок действия

Помните, что некоторые IBAN требуют обновления каждые 20-30 лет. Регулярно проверяйте актуальность реквизитов.

Готовы начать?

Ускорьте валидацию платежей

Протестируйте Regexly API бесплатно. Мы предоставляем 100 бесплатных валидаций IBAN, чтобы вы могли оценить скорость и точность.