Mod-97 проверка
Регулярные выражения могут проверить формат (например, 22 символа), но не могут математически подтвердить контрольную сумму. Regexly выполняет полный алгоритм Mod-97 на сервере.
Финансовая точность в каждой транзакции. Разбираем стандарт, алгоритм Mod-97, структуру BBAN и практические примеры интеграции.
Международный банковский номер счета (IBAN) — это ключевой стандарт для международных переводов в Европе и многих других странах. Ошибка в одной цифре может привести к возврату транзакции, штрафам за просрочку или даже к потере средств. Для банковских систем стоимость обработки невалидного IBAN может достигать $20 за каждый случай.
IBAN состоит из 34 символов (максимальная длина) и имеет фиксированную структуру, регламентируемую ISO 13616. Он включает в себя:
Код страны регистрации счета. Например, DE для Германии, FR для Франции.
Контрольная сумма. Используется для проверки правильности номера с помощью алгоритма Mod-97.
Основной номер банковского счета. Содержит информацию о банке и клиенте, формат которой уникален для каждой страны.
Пример: DE89370400440532013000
DE (Страна) + 89 (Контрольная сумма) + 370400440532013000 (BBAN)
Контрольная сумма IBAN рассчитывается по алгоритму Mod-97. Это не обычная сумма цифр, а сложная математическая операция, которая гарантирует, что номер не был изменен случайно.
Алгоритм проверки:
Условие валидности: Остаток от деления должен быть равен 1.
IBAN используется в 40 странах. Длина и структура BBAN сильно варьируются.
| Страна | Код | Длина IBAN | BBAN |
|---|---|---|---|
| Германия | DE | 22 | 20 цифр |
| Франция | FR | 27 | 23 цифры |
| Великобритания | GB | 22 | 18 цифр |
| Италия | IT | 27 | 23 цифры |
| Испания | ES | 24 | 20 цифр |
| Нидерланды | NL | 18 | 14 цифр |
Регулярные выражения могут проверить формат (например, 22 символа), но не могут математически подтвердить контрольную сумму. Regexly выполняет полный алгоритм Mod-97 на сервере.
У нас есть правила валидации для всех 40 стран-участниц. Мы поддерживаем редкие форматы, такие как Беларусь (BY) или Казахстан (KZ), которые сложны для самостоятельной реализации.
Regexly проверяет действительность банка (BIC/SWIFT) в реальном времени. Мы убеждаемся, что счет действительно принадлежит указанному банку, а не является фейковым.
Ниже приведены примеры реализации алгоритма проверки на Python и JavaScript.
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
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
Для промышленной эксплуатации Regexly API обрабатывает всю логику Mod-97 и проверку BIC в одном запросе, что исключает риск человеческой ошибки.
Помните, что некоторые IBAN требуют обновления каждые 20-30 лет. Регулярно проверяйте актуальность реквизитов.
Протестируйте Regexly API бесплатно. Мы предоставляем 100 бесплатных валидаций IBAN, чтобы вы могли оценить скорость и точность.