IBAN (International Bank Account Number) представляет собой международный формат банковского счёта, разработанный для унификации идентификации счетов при трансграничных переводах. Строка IBAN всегда имеет строго определённую структуру, которая включает код страны, контрольные цифры и базовый номер счёта, специфичный для конкретного банка.
Формат IBAN регулируется стандартом ISO 13616, что позволяет использовать единый алгоритм проверки корректности независимо от страны. В прикладных системах основной задачей становится не только хранение IBAN, но и его валидация перед отправкой в платёжные сервисы.
IBAN состоит из нескольких логических частей:
Пример IBAN:
GB82 WEST 1234 5698 7654 32
После удаления пробелов остаётся строка фиксированного формата, пригодная для алгоритмической обработки.
Ключевое свойство IBAN — наличие контрольной суммы, позволяющей обнаруживать большинство ошибок ввода, включая перестановку символов и опечатки.
Проверка IBAN основана на модульной арифметике (mod 97). Алгоритм включает несколько этапов:
Если остаток равен 1 — IBAN считается корректным.
Этот алгоритм универсален и не зависит от конкретной страны, что делает его удобным для реализации в программных библиотеках.
Библиотека Validator.js предоставляет набор функций для валидации строковых данных, включая проверку IBAN. Основная функция:
validator.isIBAN(str [, options])
Функция возвращает true, если строка соответствует
стандарту IBAN, и false в противном случае.
const validator = require('validator');
validator.isIBAN('GB82 WEST 1234 5698 7654 32');
// true
Пробелы в IBAN допускаются и автоматически игнорируются при проверке, что соответствует реальным пользовательским данным, где формат часто вводится с разделителями.
Перед проверкой библиотека приводит строку к единому виду:
Это снижает вероятность ошибок, связанных с форматированием ввода.
Некоторые реализации Validator.js позволяют ограничивать список допустимых стран через параметры. Это полезно в системах, где ожидаются счета только определённых регионов.
validator.isIBAN('DE89 3704 0044 0532 0130 00', {
countryCodeWhitelist: ['DE', 'FR']
});
Если страна IBAN отсутствует в списке разрешённых, функция возвращает
false даже при корректной контрольной сумме.
Внутренняя логика проверки IBAN в Validator.js строится на последовательной трансформации строки:
Удаляются пробелы и специальные символы-разделители.
Первые четыре символа перемещаются в конец строки:
GB82 WEST... → WEST...GB82
Каждая буква заменяется на числовое значение:
W = 32, E = 14, S = 28, T = 29
Таким образом строка превращается в длинную числовую последовательность.
Число разбивается на блоки, чтобы избежать переполнения, и последовательно вычисляется остаток:
remainder = number % 97
Корректный IBAN всегда даёт результат 1.
Validator.js ориентирован на работу в JavaScript-среде (Node.js и браузер) и учитывает ограничения языка:
Это особенно важно, поскольку IBAN может достигать 34 символов, а после преобразования — значительно увеличиваться по длине.
Некорректные значения могут возникать по разным причинам:
GB82 WEST 1234 5698 7654 3 // недостаточная длина
GB82 WEST 12@4 5698 7654 32
GB00 WEST 1234 5698 7654 32
Validator.js отсекает такие случаи ещё до выполнения математической проверки, если формат нарушен.
IBAN часто используется в финансовых и платёжных интерфейсах. Валидация на уровне клиентского кода позволяет снизить количество запросов с ошибочными данными.
Типовой сценарий:
isIBANfalse выводится ошибка вводаtrue данные отправляются на серверif (!validator.isIBAN(userInput)) {
throw new Error('Некорректный IBAN');
}
Алгоритм mod 97 имеет линейную сложность O(n), где n — длина строки. Validator.js оптимизирует процесс за счёт:
Это позволяет использовать проверку IBAN даже в высоконагруженных интерфейсах без заметных затрат.
Разные страны используют собственные форматы BBAN, что влияет на структуру IBAN после кода страны. Validator.js не проверяет банковскую структуру внутри страны, ограничиваясь стандартом IBAN:
Проверка специфики банковского счёта (например, валидность кода банка) остаётся на стороне бизнес-логики приложения.
Несмотря на надёжность алгоритма, проверка IBAN имеет ограничения:
Она служит исключительно для проверки синтаксической и математической корректности строки.
IBAN-проверка часто используется совместно с другими функциями:
isEmpty — проверка на пустое значениеtrim — удаление пробеловisAlphanumeric — базовая проверка символовescape — подготовка строки к хранениюКомбинация этих методов позволяет выстроить полноценный слой валидации входных данных.
При использовании isIBAN часто возникают ошибки,
связанные не с библиотекой, а с логикой приложения:
Корректная практика заключается в передаче «сырой» строки напрямую в Validator.js без промежуточных преобразований, кроме удаления очевидного мусора ввода.
Validator.js одинаково функционирует в двух средах:
const validator = require('validator');
import validator from 'validator';
В обоих случаях реализация isIBAN остаётся идентичной,
так как логика не зависит от окружения.
При массовой проверке IBAN (например, импорт банковских данных) используется пакетная обработка:
const results = ibans.map(iban => validator.isIBAN(iban));
Такая схема позволяет быстро фильтровать некорректные записи до загрузки в базу данных.
Дополнительная оптимизация достигается за счёт предварительной очистки массива от заведомо пустых значений, чтобы не выполнять лишние вызовы функции.
Использование Validator.js для проверки IBAN снижает количество ошибок в финансовых системах, минимизирует возвраты платежей и уменьшает нагрузку на серверную валидацию.
Основной эффект достигается за счёт раннего обнаружения некорректных данных на клиентской стороне, что делает процесс обработки более предсказуемым и устойчивым к человеческим ошибкам ввода.