в 20-ти значном лицевом (банковском) счете на 9 позиции цифра - защитный ключ. Как его рассчитать в макросе? Алгоритм расчета вот здесь
нашел: http://nemchinov1.narod.ru/prak1c/tema_2a.htm
Считать это надо как я понял, с помощью массивов?
Но может у кого имеется готовое решение?
Расчет защитного ключа в лиц.счете
Модератор: Naeel Maqsudov
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Готового решения у меня не было, но теперь есть:
Параметры:
account - двадцатизначный номер банковского счета (не важно, с кодом или без) как символьную строку;
bic - банковский идентификационный код (БИК) или условный номер кредитной организации (последние 3 цифры БИК) как символьную строку.
Возвращает:
Защитный (контрольный) ключ 20-значного банковского счета.
Код: Выделить всё
Function GetKey(account As String, bic As String) As Byte
Dim temp As String
Dim wght(0 To 2) As Byte
Dim i As Byte
Dim s As Integer
wght(0) = 3: wght(1) = 7: wght(2) = 1
temp = Right(bic, 3) & Left(account, 8) & "0" & Right(account, 11)
s = 0
For i = 1 To 23
s = s + CByte(Mid(temp, i, 1)) * wght(i Mod 3)
Next i
GetKey = ((s Mod 10) * 3) Mod 10
End Function
account - двадцатизначный номер банковского счета (не важно, с кодом или без) как символьную строку;
bic - банковский идентификационный код (БИК) или условный номер кредитной организации (последние 3 цифры БИК) как символьную строку.
Возвращает:
Защитный (контрольный) ключ 20-значного банковского счета.
На заказ: VBA, Excel mc-black@yandex.ru
Вот это класс!)
А я правда, уже тоже сделал, но громоздко и "все по-порядку"...
С Вашим конечно не сравнить...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
а как вот это работает: (i Mod 3) ?
А я правда, уже тоже сделал, но громоздко и "все по-порядку"...
С Вашим конечно не сравнить...
Код: Выделить всё
.........
'Sch1-Sch4 - куски счета, разные переменные, т.к. для визуального упрощения ввода
'вводятся в разных текстбоксах.
'(фактически, теперь вручную только последние три цифры)
Sch0 = Right(ThisWorkbook.Sheets("Сервис").Range("A14"), 3) ' три цифры из БИКа
s0 = (Mid(Sch0, 1, 1) * 7) + Mid(Sch0, 2, 1) + (Mid(Sch0, 3, 1) * 3)
s1 = (Mid(Sch1, 1, 1) * 7) + Mid(Sch1, 2, 1) + (Mid(Sch1, 3, 1) * 3) + (Mid(Sch1, 4, 1) * 7) + _
Mid(Sch1, 5, 1) + (Mid(Sch1, 6, 1) * 3) + (Mid(Sch1, 7, 1) * 7) + Mid(Sch1, 8, 1)
s3 = (Mid(Sch3, 1, 1) * 7) + Mid(Sch3, 2, 1) + (Mid(Sch3, 3, 1) * 3) + (Mid(Sch3, 4, 1) * 7) + _
Mid(Sch3, 5, 1) + (Mid(Sch3, 6, 1) * 3) + (Mid(Sch3, 7, 1) * 7) + Mid(Sch3, 8, 1)
s4 = (Mid(Sch4, 1, 1) * 3) + (Mid(Sch4, 2, 1) * 7) + Mid(Sch4, 3, 1)
Sch2 = Right((s0 + s1 + s3 + s4) * 3, 1)
Добавлено сообщение
--------------------------------------------------------------------------------
а как вот это работает: (i Mod 3) ?
- mc-black
- Сообщения: 250
- Зарегистрирован: 08 май 2008, 16:09
- Откуда: Россия, Нижний Новгород
- Контактная информация:
Это целый остаток от целочисленного деления одного числа на другое, например:1 mod 3 = 1, 2 mod 3 = 2, 3 mod 3 = 0, 4 mod 3 = 1, 5 mod 3 = 2, 6 mod 3 = 0 и т.д.
Добавлено:
остаток от деления на 10 - это последний разряд десятичного числа.
Добавлено:
остаток от деления на 10 - это последний разряд десятичного числа.
На заказ: VBA, Excel mc-black@yandex.ru
Дали задание : дано-код БИК банка,номер р\с клиента,требуется найти алгоритм вычисление контрольного рязряда,составить программу реализующую два сценария работы:
а)БИК и номер счета вводятся в диалоге (форма)
б)пары БИК - номер счета вводятся из текстового файла.
буду очень признательна если поможете
а)БИК и номер счета вводятся в диалоге (форма)
б)пары БИК - номер счета вводятся из текстового файла.
буду очень признательна если поможете