Валидатор и парсер IBAN

Проверьте международный номер банковского счёта офлайн: код страны, длину по реестру и контрольную сумму ISO 7064 MOD 97-10, плюс разбор по полям и печатное форматирование.

Является ли этот номер счёта структурно корректным? Вставьте IBAN с пробелами или без. Проверка выполняется целиком в вашем браузере: код страны по реестру SWIFT, общая длина, затем контрольная сумма ISO 7064 MOD 97-10.

Страна
Контрольные цифры
BBAN
Длина

Как на самом деле работает проверка IBAN

Национальный номер счёта с обёрткой

IBAN — это не новый вид номера счёта. Это существующий внутренний номер счёта, называемый BBAN, к которому спереди прикреплены четыре символа: двухбуквенный код страны ISO 3166 и две контрольные цифры. Всё, что после этих четырёх символов, — это то, что уже использует национальная банковская система, поэтому длина так сильно варьируется. Норвежский IBAN — 15 символов, мальтийский — 31, и оба совершенно корректны.

Эта изменчивость — первый настоящий шаг проверки, и тот, который люди чаще всего пропускают. Каждая страна регистрирует в SWIFT точную общую длину, и длина фиксирована, а не является максимумом. Немецкий IBAN всегда состоит из 22 символов. Если вы получите 21-символьную строку, начинающуюся с DE, она неверна независимо от того, что говорит контрольная сумма, потому что перестановка, укорачивающая строку, не может быть поймана контрольной суммой, которая никогда не видит недостающий символ. Проверка длины по стране заранее также даёт гораздо более полезное сообщение об ошибке, чем общее падение контрольной суммы.

Контрольная сумма MOD 97-10

Контрольная сумма взята из ISO 7064 и элегантно проста. Перенесите первые четыре символа в конец, замените каждую букву числом, где A — 10, а Z — 35, затем прочитайте всё это как одно огромное целое. Если это целое при делении на 97 даёт в остатке ровно 1, IBAN проходит проверку.

Загвоздка в том, что полученное число много больше любого нативного целочисленного типа языка, часто 80 цифр и более. Вместо того чтобы обращаться к библиотеке больших чисел, реализации сокращают его по частям: проходят строку слева направо и после каждой цифры оставляют только текущее значение по модулю 97. Поскольку модулярная арифметика распределяется над цифро-за-цифрой конструкцией, финальный остаток идентичен тому, что дало бы всё число целиком, а стоит это одного прохода без выделения памяти. Именно это и делает этот инструмент.

MOD 97-10 выбран, потому что он необычайно силён для двухсимвольной проверки. Он ловит любую замену одного символа, любую транспозицию двух соседних символов и подавляющее большинство более длинных перестановок. Режимы ошибок, которые он не видит, настолько редки, что остаточный риск определяется тем, что счёт просто не существует.

Чего не говорит действительный IBAN

Структурная корректность — это не существование. IBAN с верной контрольной суммой может указывать на закрытый счёт, счёт, который никогда не открывали, или банк, который с тех пор слился и перестал существовать. Единственный способ узнать, что деньги дойдут, — попытаться выполнить перевод или воспользоваться проверочной службой банка. Относитесь к проверке как к способу поймать опечатки при вводе, а не как к подтверждению того, что получатель реален.

Форматирование также требует внимания. Реестр определяет электронную форму как одну непрерывную строку без пробелов, и именно её нужно отправлять в платёжный файл или хранить в базе данных. Группированная форма по четыре символа существует только для печати на бумаге, где она помогает людям точно копировать длинные строки. Нормализуйте при вводе, храните плоско и добавляйте пробелы обратно только для отображения.

Примечание об открытом коде: реализовано на чистом JavaScript без сторонних библиотек.

Часто задаваемые вопросы

Означает ли верная контрольная сумма, что счёт существует?
Нет. Контрольная сумма лишь доказывает внутреннюю согласованность строки, то есть ничего не было опечатано или переставлено. Стоящий за ней счёт может быть закрыт или никогда не существовал. Только принимающий банк может подтвердить, что IBAN активен.
Почему IBAN имеют разную длину?
Потому что часть после первых четырёх символов — это существующий внутренний номер счёта страны, и он был стандартизирован на национальном уровне задолго до появления IBAN. Каждая страна зарегистрировала в SWIFT свою фиксированную длину — от 15 символов в Норвегии до 32 на Сент-Люсии.
Следует ли хранить IBAN с пробелами?
Нет. Храните электронную форму — одну непрерывную строку без пробелов и знаков препинания, именно её ожидают платёжные системы. Разбивка по четыре символа — чисто печатная условность, поэтому добавляйте её при отрисовке и убирайте при вводе.
Что такое часть BBAN?
Basic Bank Account Number — всё, что после кода страны и контрольных цифр. Его внутренняя структура специфична для страны и часто кодирует идентификатор банка, код филиала и номер счёта, иногда со своей национальной контрольной цифрой.
Отправляется ли мой IBAN на сервер?
Нет. И поиск по длине, и вычисление MOD 97-10 выполняются в вашем браузере, и страница не делает сетевых запросов с вашим вводом. Вы можете отключиться — инструмент всё равно будет работать.
Почему мой IBAN не проходит при правильном количестве символов?
Почти всегда это один неверно введённый или переставленный символ. MOD 97-10 ловит любую ошибку одной цифры и любую соседнюю транспозицию, поэтому сбой контрольной суммы при правильной длине означает, что один символ лишний. Перечитайте источник, особенно там, где легко спутать 0 и O или 1 и I.