Расчет защитного ключа в лиц.счете

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
RomaS
Сообщения: 57
Зарегистрирован: 05 мар 2008, 09:59

в 20-ти значном лицевом (банковском) счете на 9 позиции цифра - защитный ключ. Как его рассчитать в макросе? Алгоритм расчета вот здесь
нашел: http://nemchinov1.narod.ru/prak1c/tema_2a.htm
Считать это надо как я понял, с помощью массивов?
Но может у кого имеется готовое решение?
Аватара пользователя
mc-black
Сообщения: 250
Зарегистрирован: 08 май 2008, 16:09
Откуда: Россия, Нижний Новгород
Контактная информация:

Готового решения у меня не было, но теперь есть:

Код: Выделить всё

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
RomaS
Сообщения: 57
Зарегистрирован: 05 мар 2008, 09:59

Вот это класс!)

А я правда, уже тоже сделал, но громоздко и "все по-порядку"...
С Вашим конечно не сравнить...

Код: Выделить всё

 .........

'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 - это последний разряд десятичного числа.
На заказ: VBA, Excel mc-black@yandex.ru
Femida
Сообщения: 1
Зарегистрирован: 10 дек 2010, 13:20

Дали задание : дано-код БИК банка,номер р\с клиента,требуется найти алгоритм вычисление контрольного рязряда,составить программу реализующую два сценария работы:
а)БИК и номер счета вводятся в диалоге (форма)
б)пары БИК - номер счета вводятся из текстового файла.
буду очень признательна если поможете
Ответить