Формат кода IBAN включает
- 1—2 символы — код страны, где находится банк получателя (в соответствии со стандартом ISO 3166-1 alpha-2)
- 3—4 символы — контрольное уникальное число IBAN, рассчитываемое по стандарту (ISO 7064)
- 5—34 символы — Basic Bank Account Number (BBAN), базовый номер банковского счёта, включающий, как минимум, сам номер счёта, так и признак банка получателя (в том числе код филиала банка). Длина и содержание этой части IBAN зависят от выбора конкретной страны, но ограничиваются максимум 30 знаками.
Источник: https://ru.wikipedia.org/wiki/IBAN
Для Украины длина номера IBAN 29 символов
Предпочтительный алгоритм:
1. Проверить, что общая длина IBAN является правильной согласно стране. Если нет, IBAN является недействительным.
2. Замените две контрольные цифры на 00 (например, UA00 для Украины).
3. Переместить четыре начальных символа в конец строки.
4. Заменить буквы в строке цифрами, расширив строку при необходимости, чтобы A или a = 10, B или b = 11 и Z или z = 35. Таким образом, каждый алфавитный символ заменяется 2 цифрами
5. Преобразовать строку в целое число (то есть игнорировать начальные нули).
6. Вычислить mod-97 из нового числа, в результате чего получится остаток.
7. Вычислить остаток от 97; полученный результат отнять от 98 и использовать результат для двух контрольных цифр. Если результатом является однозначное число, добавьте к нему начальный 0, чтобы сделать двузначное число.
Поэтапный расчет D mod 97 может быть выполнен разными способами. Один из таких способов заключается в следующем:
1. Начиная с самой левой цифры D, составьте число, используя первые 9 цифр, и назовите его N.
2. Рассчитать N мод 97.
3. Создайте новый 9-значный N путем объединения вышеуказанного результата (шаг 2) со следующими 7 цифрами D. Если в D осталось менее 7 цифр, но хотя бы один, то создайте новый N, который будет иметь менее 9 цифры из вышеприведенного результата (шаг 2), за которыми следуют оставшиеся цифры D
4. Повторяйте шаги 2–3, пока все цифры D не будут обработаны
Результатом окончательного расчета на шаге 2 будет D mod 97 = N mod 97.
пример алгоритма mod 97
В этом примере вышеупомянутый алгоритм для D mod 97 будет применен к D = 3214282912345698765432161182. (Цифры имеют цветовую кодировку, чтобы помочь описанию ниже.) Если результат равен единице, IBAN, соответствующий D, проходит проверку контрольной цифры.
Построить N из первых 9 цифр D
N = 321428291
Рассчитать N мод 97 = 70
Создайте новый 9-значный N из вышеуказанного результата (шаг 2), а затем следующие 7 цифр D.
N = 702345698
Рассчитать N мод 97 = 29
Создайте новый 9-значный N из приведенного выше результата (шаг 4), а затем следующие 7 цифр D.
N = 297654321
Рассчитать N мод 97 = 24
Создайте новый N из приведенного выше результата (шаг 6), а затем оставшиеся 5 цифр D.
N = 2461182
Рассчитать N мод 97 = 1
Начиная с шага 8, конечный результат - D mod 97 = 1
Для проверки генерации IBAN можно использовать ряд сайтов, например, https://bank.codes/iban/generate/ukraine/
Программный код обработки:
Функция ПеревестиБуквыВЦифрыДляМсчета(знак)
Если найти("0123456789", "" + знак)>0 тогда
//это изначально цифра
возврат "" + знак;
Иначе
//буква
возврат "" + (10 + (кодсимвола(нрег(знак),1)-кодсимвола("a",1)));
КонецЕсли;
КонецФункции
Функция КонтрольнаяСумма(кс)
Если стрдлина(кс)<>29 Тогда
Сообщить ("номер счета не для Украины");
Возврат "00";
КонецЕсли;
//переставляем UA00 в конец
кс = сред(кс, 5, 25) + сред(кс,1,4);
кс2 = "";
для сч = 1 по 29 цикл
кс2 = кс2 + ПеревестиБуквыВЦифрыДляМсчета(сред(кс,сч, 1));
конеццикла;
//алгоритм mod 97
для сч = 0 по 10 цикл
кс2 = ("" + (число(сред(кс2,1,9)) % 97) + сред(кс2, 10));
конеццикла;
возврат прав("00"+(98-число(кс2)),2);
КонецФункции
Функция СчетВМеждународномФормате(счет, мфо)
счет_ = сокрлп(счет);
мфо_ = сокрлп(мфо);
длина_счет = стрдлина(счет_);
длина_мфо = стрдлина(мфо_);
длинанулей = 29 - 2 - 2 - длина_мфо -длина_счет;
кс = КонтрольнаяСумма("UA00" + мфо_ + прав("00000000000000000000000000000", длинанулей) + счет_);
возврат "UA" + кс + мфо_ + прав("00000000000000000000000000000", длинанулей) + счет_;
КонецФункции
Процедура КнопкаВыполнитьНажатие(Кнопка)
IBAN = СчетВМеждународномФормате(СтарыйСчет,мфо);
КонецПроцедуры