Проверка счетов IBAN Беларусь

Обработки - Универсальные обработки

С 04.07.2017 в Беларуси вводится новая нумерация банковских счетов. Обработка поможет расчитать контрольную цифру, и проверить введенный счет на правильность. + Небольшое количество инфы по переходу

Итак. Официально и обо всем можно прочитать здесь: 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(СчетДляПроверки))
	
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
Проверка счетов IBAN Беларусь:
.epf 6,45Kb
11.05.17
3
.epf 1.0 6,45Kb 3 Скачать

См. также

Комментарии
1. MSConfig Infostart (MSConfig) 3 11.05.17 15:42 Сейчас в теме
IBAN.
Не очень сильно вникал в суть разработки, но название приятное. Душевное название я бы сказал. Плюс за хороший нейминг!
2. Egor Saveiko (GOshaSaveiko) 22 11.05.17 16:01 Сейчас в теме
(1) Для программеров и юзеров оно действительно как называется, так и выглядит, но для справки:
IBAN (International Bank Account Number) – это номер банковского счета клиента в банке или другом финансовом учреждении, присвоенный в соответствии с международным стандартом ISO 13616:2007
3. Merlin Free (merlin1975) 2 11.05.17 18:58 Сейчас в теме
Интересненько.
Только от себя добавил удаление пробелов в счете, ибо нашел счет в "красивом" виде с пробелами.
4. Egor Saveiko (GOshaSaveiko) 22 11.05.17 23:03 Сейчас в теме
(3) ну, тут, скорее, методология, чем обработка. Вряд ли вы ее именно в таком чистом виде использовать. Но 28 символов длины практически обязывают проверять за человеком.
Для удобства восприятия человеком, код IBAN записывается, как правило, группами по 4 знака, разделяемых пробелами, начиная с первого. В платёжных и иных документах в электронном формате IBAN вводится без пробелов.
По-идее пробела или любого другого символа кроме цифр и букв в соответствии нет. Если значение в соответствии не найдено, то метод Получить() вернёт неопределено. А в свою очередь "строка"+неопределено вернёт просто "строка". По-идее должен проглотить без модификаций. И пробелы и неразрывные пробелы и чёрточки и точечки и что там ещё кому на голову упадет.
5. Merlin Free (merlin1975) 2 11.05.17 23:28 Сейчас в теме
Посидел вечерок и на основе Вашей обработки написал для 8.2 и 7.7 и выяснил, что в 8-ке надобно использовать СтрокаСчета = "0" и преобразование Число(СтрокаСчета)+Число(МатрицаЗнаков.Получить(Сред(ЧистаяСтрока, Ном, 1))) иначе она все подряд лепит (по крайней мере у меня). Выяснил это расчетным путем в 7-ке. Стал выводить все расчеты в сообщения и удивился...
6. Egor Saveiko (GOshaSaveiko) 22 11.05.17 23:34 Сейчас в теме
(5)
число("1")+число("10")
// = 11 
. Нам же не надо символы складывать между собой. Нам надо получить слепленную строку "110" и в самом конце получить огромное число 110.
Мы, как бы подменяем буквы цифрами. Цифры в соответствии для фильтрации левых символов.
В 7.7 мне это видится как отдельная функция с чередой
Если символ = "1" тогда
Возврат "1";
ИначеЕсли символ = "2" тогда
Возврат "2";
//....
ИначеЕсли символ = "А" тогда
Возврат "10";
//....
Иначе возврат ""; конецесли
Показать
" *не судите. Пишу с телефона.
Кстати Число132, Число135 - это не просто от балды названия переменных. Это пункты 1.3.2, 1.3.5 из методологии расчета контрольного числа в документах нацбанка.
7. Merlin Free (merlin1975) 2 12.05.17 10:08 Сейчас в теме
Благодарю!
Теперь понял, а то суммировал... В семерке я реализовал через ТЗ и обращение к ней.
8. Bonia Bonia (Bonia1979) 13.05.17 11:25 Сейчас в теме
Из вышеперечисленных файлов немного подкорректировал файл банков добавил адрес и город в формате Dbf и xls .Также присутствует универсальная обработка загрузи из DBF файлов для 1с7,7 Думаю пригодится ребятам. https://yadi.sk/d/d-KwToRh3J6sX8
daraiznau; +1 Ответить
9. Merlin Free (merlin1975) 2 13.05.17 13:34 Сейчас в теме
10. www witalit (wtlz) 11 31.05.17 12:01 Сейчас в теме
Спасибо! Очень пригодилось!
11. Egor Saveiko (GOshaSaveiko) 22 31.05.17 15:50 Сейчас в теме
12. Игорь Дайнеко (Dnki) 01.06.17 06:35 Сейчас в теме
Буду скачивать. Сейчас над этой темой работаем.
13. Egor Saveiko (GOshaSaveiko) 22 01.06.17 15:45 Сейчас в теме
(12), я так понимаю, сейчас почти все над этой темой работают. )))
14. www witalit (wtlz) 11 14.06.17 10:54 Сейчас в теме
http://iban.bisc.by - появилась такая пакетная штука. Через WSDL к ней кто-нибудь научился обращаться (напрямую из 1С подсовывать входной файл и забирать результат?)
15. www witalit (wtlz) 11 14.06.17 12:38 Сейчас в теме
(14) сам себе отвечу ответом от НБРБ:
работа калькулятора в качестве веб-сервиса не предусмотрена и реализовываться не будет.
AlenkaZu; +1 Ответить
Оставьте свое сообщение