Любому коду, который принимает, хранит или отправляет IBAN, нужны тестовые данные: для валидации форм, сценариев онбординга, фикстур базы данных, платёжных интеграций и нагрузочных тестов. Реальным IBAN клиентов не место в тестовой среде, а у IBAN, набранных вручную, контрольные цифры редко бывают верными. Тестовый IBAN, который иногда называют фиктивным или фейковым, решает обе проблемы: он проходит структурную валидацию, и ни один банк его не выпускал.
Что проверяет валидатор
Валидация IBAN проходит в несколько слоёв. Каждый слой ловит свои проблемы, а тестовый IBAN проходит только часть из них.
| Проверка | Что проверяется | Сгенерированный тестовый IBAN |
|---|---|---|
| Символы | После удаления пробелов остались только буквы и цифры | Проходит |
| Страна | Первые две буквы обозначают страну, где используют IBAN | Проходит |
| Длина | Длина соответствует стране, например 22 для Германии | Проходит |
| Шаблон | На каждой позиции BBAN стоит символ нужного типа (цифра или буква) | Проходит |
| Контрольные цифры | Остаток MOD-97 равен 1 | Проходит |
| Национальные контрольные цифры | Правила страны внутри BBAN, например CIN в Италии или clé RIB во Франции | Проходит в странах, где мы вычисляем официальный алгоритм (их 27); в остальных цифры случайные и могут не пройти |
| Справочник банков | Код банка существует | Проходит для стран с настоящими кодами банков в реалистичном режиме, который включён по умолчанию (таких стран 84); в остальных случаях обычно не проходит |
| Поиск счёта | Счёт существует, и имя совпадает | Не проходит |
Для последних двух проверок нужны данные от банков. В Великобритании Confirmation of Payee сравнивает имя владельца счёта с тем, которое ввёл плательщик, а в еврозоне то же самое перед переводом делает Verification of Payee. Случайный IBAN не может пройти такие проверки, и так и должно быть. Национальный уровень проверки разобран по странам в статье Национальные контрольные цифры в IBAN.
Первым пяти проверкам, а также проверке национальных контрольных цифр там, где известно правило, внешние данные не нужны. Наш валидатор IBAN выполняет их в вашем браузере и показывает, какая из них не пройдена. Наша библиотека для JavaScript с открытым исходным кодом iban-check выполняет все пять по реестру IBAN SWIFT и возвращает код ошибки, по которому видно, какая проверка не пройдена. Алжира и Марокко нет в реестре, поэтому их IBAN она отклоняет. Пакет доступен в npm под именем iban-check.
Ошибки, которые ломают обработку IBAN
Вот баги, которые снова и снова встречаются в коде для IBAN:
- Одна длина для всех стран. В немецких IBAN 22 символа, но в норвежских 15, а в мальтийских 31. Проверяйте длину отдельно для каждой страны, а не по одному фиксированному числу.
- Только цифры после кода страны. Нидерландские, британские и многие другие IBAN содержат буквы в BBAN (
NL91ABNA0417164300). Регулярное выражение, которое разрешает только цифры, их отклонит. - Хранение в печатном формате. Храните IBAN в электронном формате, без пробелов и заглавными буквами, а пробелы добавляйте только при выводе на экран.
- IBAN как число. В нём есть буквы, а BBAN может начинаться с нулей. Храните его как строку.
- Переполнение целого числа в MOD-97. Для всех стран, кроме Норвегии и Бельгии, преобразованное число не помещается в 64-битное целое (около 19 цифр): у немецкого IBAN в нём 24 цифры. Используйте арифметику произвольной точности или пошаговый расчёт остатка из статьи Как работают контрольные цифры IBAN.
- Невидимые символы при копировании. Пользователи вставляют IBAN с неразрывными пробелами, табуляцией или переносами строк. Удаляйте все пробельные символы, а не только обычный пробел.
- Ввод строчными буквами. Люди пишут
de89.... Перед проверкой переводите строку в верхний регистр.
Какой тестовый IBAN выбрать
Случайные тестовые IBAN подходят для большинства тестов: валидации форм, фикстур, начальных данных (seed data), нагрузочных тестов и скриншотов. Берите IBAN разных стран, а не только своей, чтобы проверить обработку длины и шаблона. Длинные форматы, например мальтийский (31), и короткие, например норвежский (15), хорошо подходят как граничные случаи. По умолчанию генератор работает в реалистичном режиме: он использует только цифры и, где это возможно, код настоящего банка со случайным номером счёта, так что код, который ищет банк, его найдёт. Такой IBAN тоже не выпускал ни один банк, но он может случайно совпасть с реальным счётом. Выключите «Реалистичные», чтобы получить полностью случайные IBAN: код банка тоже будет случайным, что подходит для проверки неизвестного банка, а там, где формат допускает буквы, они могут появиться.
Платёжные провайдеры часто публикуют собственные тестовые IBAN, которые вызывают в их песочнице определённый результат, например успешное или неудачное списание. Когда вы проверяете сценарий провайдера от начала до конца, берите IBAN из его документации.
Никогда не используйте IBAN реального человека в тестах, демо или документации и никогда не отправляйте деньги на сгенерированный IBAN. Вероятность того, что случайный IBAN совпадёт с реальным счётом, очень мала, но не равна нулю.
Тестовые IBAN в вашем пайплайне
Генератор показывает один IBAN и объясняет его сегменты. Функция «Сгенерировать список» создаёт сразу от 5 до 100 IBAN одной страны: их можно скопировать или скачать в формате CSV, JSON, SQL или простого текста, по столбцу на каждый сегмент. Для автоматических тестов:
- REST API возвращает до 100 валидных IBAN за запрос для любой поддерживаемой страны, а также проверяет IBAN. Для него нужен API-ключ, подробности в документации API.
- Публичный MCP-сервер позволяет ИИ-агентам и ассистентам для программирования генерировать и проверять тестовые IBAN без ключа.
- Файл, который скачивается через «Сгенерировать список», доступен по обычному URL без ключа, поэтому скрипт может загрузить фикстуры напрямую (30 загрузок в минуту).
- Если тесты должны работать офлайн, сгенерируйте набор IBAN один раз и сохраните его в репозитории как фикстуры.
# 50 нидерландских IBAN в CSV, ключ не нужен
curl -o fixtures.csv "https://generaterandomiban.com/export/nl?format=csv&count=50"
# 5 IBAN через API, с ключом
curl -H "X-API-Key: YOUR_KEY" \
"https://generaterandomiban.com/api/v1/generate/NL?count=5"
Источники
- Реестр IBAN SWIFT (SWIFT IBAN Registry): длина и структура BBAN каждой страны.
- ISO 13616-1:2020: структура IBAN.
- ISO/IEC 7064: метод расчёта контрольных цифр MOD 97-10.
- Регламент (ЕС) 2024/886: проверка получателя (Verification of Payee) при переводах в евро.