Итак. Официально и обо всем можно прочитать здесь: https://www.nbrb.by/payment/IBANBIC
О порядке расчета контрольной цифры и порядке проверки счета: https://www.nbrb.by/Legislation/documents/P_440.pdf
Таблица соответствия текущих банковских кодов кодам BIC лежит здесь: https://www.nbrb.by/payment/IBANBIC/ConformanceTableBICOldAndNew.docx
09.06.2017 Нацбанк опубликовал инструмент для пакетной обработки счетов старых в новые: http://iban.bisc.by/
Некоторые банки самостоятельно предоставляют онлайн-калькуляторы новых счетов из старых.
Обработка умеет расчитывать контрольную цифру, а также проверять счет на правильность.
Часто можно увидеть некоторую корреляцию между старыми и новыми счетами, но у различных банков она разная. Инвестбанк, судя по всему, вообще выдал новые номера.
Ниже я выкладываю код обработки для тех кто любит все бесплатно, но при наличии у вас $m буду благодарен, если поделитесь, путем загрузки обработки. Ибо сам обычно нищенствую.
&НаКлиенте
Функция ЧетыреЗнакаВХвост(СчетДляПроверки)
ЧетыреЗнака = ""+Лев(СчетДляПроверки, 4);
ЧистаяСтрока = Сред(СчетДляПроверки, 5);
Возврат ""+ЧистаяСтрока+ЧетыреЗнака;
КонецФункции
&НаКлиенте
Функция ПостроитьМатрицуЗнаков()
МатрицаЗнаков = Новый Соответствие;
МатрицаЗнаков.Вставить("0","0");
МатрицаЗнаков.Вставить("1","1");
МатрицаЗнаков.Вставить("2","2");
МатрицаЗнаков.Вставить("3","3");
МатрицаЗнаков.Вставить("4","4");
МатрицаЗнаков.Вставить("5","5");
МатрицаЗнаков.Вставить("6","6");
МатрицаЗнаков.Вставить("7","7");
МатрицаЗнаков.Вставить("8","8");
МатрицаЗнаков.Вставить("9","9");
МатрицаЗнаков.Вставить("A","10");
МатрицаЗнаков.Вставить("B","11");
МатрицаЗнаков.Вставить("C","12");
МатрицаЗнаков.Вставить("D","13");
МатрицаЗнаков.Вставить("E","14");
МатрицаЗнаков.Вставить("F","15");
МатрицаЗнаков.Вставить("G","16");
МатрицаЗнаков.Вставить("H","17");
МатрицаЗнаков.Вставить("I","18");
МатрицаЗнаков.Вставить("J","19");
МатрицаЗнаков.Вставить("K","20");
МатрицаЗнаков.Вставить("L","21");
МатрицаЗнаков.Вставить("M","22");
МатрицаЗнаков.Вставить("N","23");
МатрицаЗнаков.Вставить("O","24");
МатрицаЗнаков.Вставить("P","25");
МатрицаЗнаков.Вставить("Q","26");
МатрицаЗнаков.Вставить("R","27");
МатрицаЗнаков.Вставить("S","28");
МатрицаЗнаков.Вставить("T","29");
МатрицаЗнаков.Вставить("U","30");
МатрицаЗнаков.Вставить("V","31");
МатрицаЗнаков.Вставить("W","32");
МатрицаЗнаков.Вставить("X","33");
МатрицаЗнаков.Вставить("Y","34");
МатрицаЗнаков.Вставить("Z","35");
Возврат МатрицаЗнаков;
КонецФункции
&НаКлиенте
Функция ПолучитьКонтрольноеЧисло(СчетДляПроверки)
ВхСчет = СокрЛП(""+Прав(СчетДляПроверки, 24)+"BY00");
ДлинуПроверил = ?(СтрДлина(ВхСчет) = 28, Истина, Ложь);
КонтрольноеЧисло = "";
Если ДлинуПроверил Тогда
МатрицаЗнаков = ПостроитьМатрицуЗнаков();
СтрокаСчета = "";
Ном = 0;
Для Ном = 1 По СтрДлина(СчетДляПроверки) Цикл
СтрокаСчета = СтрокаСчета + МатрицаЗнаков.Получить(Сред(ВхСчет, Ном, 1));
КонецЦикла;
МатрицаЗнаков = Неопределено;
Число123 = Число(СтрокаСчета);
Число124 = Цел(Число123/97);
Число125 = Число124*97;
Число126 = Число123-Число125;
Число127 = 98 - Число126;
КонтрольноеЧисло = Прав("00"+Число127,2);
КонецЕсли;
Возврат КонтрольноеЧисло;
КонецФункции
&НаКлиенте
Функция ПроверитьСчетIBAN(СчетДляПроверки)
ВхСчет = СокрЛП(СчетДляПроверки);
ДлинуПроверил = ?(СтрДлина(ВхСчет) = 28, Истина, Ложь);
Правильно = ЛОЖЬ;
Если ДлинуПроверил Тогда
ЧетыреЗнака = ""+Лев(ВхСчет, 4);
ЧистаяСтрока = ""+Сред(ВхСчет, 5)+ЧетыреЗнака;
МатрицаЗнаков = ПостроитьМатрицуЗнаков();
Ном = 0;
СтрокаСчета = "";
Для Ном = 1 По СтрДлина(ЧистаяСтрока) Цикл
СтрокаСчета = СтрокаСчета + МатрицаЗнаков.Получить(Сред(ЧистаяСтрока, Ном, 1));
КонецЦикла;
МатрицаЗнаков = Неопределено;
Число132 = Число(СтрокаСчета);
Число133 = Цел(Число132/97);
Число134 = Число133*97;
Число135 = Число132-Число134;
Правильно = (Число135 = 1);
КонецЕсли;
Возврат Правильно;
КонецФункции
&НаКлиенте
Процедура Проверить(Команда)
Сообщить(ПолучитьКонтрольноеЧисло(СчетДляПроверки));
Сообщить(ПроверитьСчетIBAN(СчетДляПроверки))
КонецПроцедуры