Проверка BIC кодов

BIC (Bank Identifier Code), также известный как SWIFT-код, представляет собой международный идентификатор финансовой организации. Он используется для маршрутизации банковских переводов и однозначного определения банка в глобальной платежной системе.

Формат BIC регламентирован стандартом ISO 9362 и имеет строго фиксированную структуру:

Общая длина: 8 или 11 символов Состав:

  • 4 символа — код банка (только латинские буквы)
  • 2 символа — код страны (ISO 3166-1 alpha-2)
  • 2 символа — код местоположения (буквы и/или цифры)
  • 3 символа (опционально) — код филиала (буквы и/или цифры)

Пример корректного BIC:

  • DEUTDEFF — головной офис банка
  • DEUTDEFF500 — конкретный филиал

Формальные ограничения и правила формирования

При проверке BIC учитываются следующие требования:

1. Длина строки

  • строго 8 или 11 символов

2. Регистрозависимость

  • допустимы только заглавные латинские буквы A–Z
  • нижний регистр считается некорректным в строгой валидации

3. Код страны

  • 5–6 символы должны соответствовать ISO-коду страны
  • например: DE, FR, US, KZ

4. Код местоположения

  • может содержать буквы и цифры
  • определяет регион или город банка

5. Код филиала

  • необязателен
  • используется для уточнения отделения

Проверка BIC в Validator.js

Библиотека Validator.js предоставляет встроенную функцию для проверки BIC:

validator.isBIC(str)

Функция выполняет полную проверку соответствия стандарту SWIFT/BIC, включая:

  • длину строки
  • допустимые символы
  • структуру кода
  • корректность формата страны

Базовое использование

import validator from 'validator';

validator.isBIC('DEUTDEFF');      // true
validator.isBIC('DEUTDEFF500');   // true

validator.isBIC('deutdeff');      // false (нижний регистр)
validator.isBIC('DEUTD1FF');      // false (недопустимые символы)
validator.isBIC('DEUTDE');        // false (неполная длина)

Внутренняя логика проверки

Хотя реализация скрыта внутри библиотеки, логика проверки эквивалентна следующим шагам:

  1. Проверка длины строки (8 или 11 символов)

  2. Проверка регулярным выражением

  3. Валидация структуры:

    • [A-Z]{4} — банковский код
    • [A-Z]{2} — код страны
    • [A-Z0-9]{2} — код местоположения
    • [A-Z0-9]{3}? — необязательный код филиала

Эквивалентное регулярное выражение:

^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$

Частые ошибки при проверке BIC

1. Использование строчных букв

validator.isBIC('deutdeff'); // false

2. Неверная длина

validator.isBIC('DEUTDEFF50'); // false

3. Недопустимые символы

validator.isBIC('DEUTD@FF'); // false

4. Нарушение структуры страны

validator.isBIC('DEUTZZFF'); // формально допустимо, но код страны может быть несуществующим

Важно учитывать, что Validator.js проверяет только формат, а не существование банка или корректность кода страны как реального участника системы SWIFT.

Использование в серверной валидации

При обработке банковских данных в backend-приложениях проверка BIC часто включается в цепочку валидации входных данных:

function validateBankData(data) {
    const errors = [];

    if (!validator.isBIC(data.bic)) {
        errors.push('Некорректный BIC код');
    }

    return errors;
}

Интеграция в middleware (пример Express)

import validator from 'validator';

function bicValidationMiddleware(req, res, next) {
    const { bic } = req.body;

    if (!bic || !validator.isBIC(bic)) {
        return res.status(400).json({
            error: 'Invalid BIC format'
        });
    }

    next();
}

Комбинирование с другими банковскими проверками

В банковских системах BIC часто используется совместно с другими идентификаторами:

  • IBAN (международный номер счёта)
  • SWIFT/BIC (идентификатор банка)
  • CLABE (в Латинской Америке)

Пример комплексной проверки:

validator.isIBAN(iban);
validator.isBIC(bic);

Такой подход позволяет валидировать как счёт, так и банк-отправитель/получатель.

Нюансы практического применения

1. Формат ≠ существование Validator.js не выполняет запросов к SWIFT базе и не проверяет реальность банка.

2. Локальные ограничения Некоторые банки используют внутренние BIC-подобные коды, которые могут не проходить строгую проверку.

3. Чувствительность к регистру Стандарт требует верхний регистр, поэтому предварительная нормализация данных часто необходима:

bic = bic.toUpperCase();

4. Производительность Проверка BIC является лёгкой операцией O(1), так как основана на регулярном выражении и длине строки.

Типовые сценарии использования

  • валидация банковских реквизитов в платёжных формах
  • проверка данных перед отправкой в платёжные шлюзы
  • контроль корректности финансовых профилей пользователей
  • обработка данных в финтех-системах и CRM

Ошибки проектирования при работе с BIC

Некорректная реализация часто включает:

  • попытку проверить существование банка через regex
  • игнорирование 11-символьного формата
  • отсутствие нормализации регистра
  • смешивание BIC и банковских внутренних кодов

Корректная модель всегда рассматривает BIC как структурированный идентификатор фиксированного формата без семантической проверки существования.