Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 23:22   #1
semen master
Новичок
Джуниор
 
Регистрация: 09.01.2011
Сообщений: 2
По умолчанию РАСЧЕТ КОНТРОЛЬНОГО КЛЮЧА В ЛИЦЕВОМ СЧЕТЕ

Здравствуйте,прошу всех кто может отозваться и помочь найти/сделать программу на VBA которая будет проверять контрольный ключ в лицевом счете при заданном БИК и номере счета...заранее спасибо
semen master вне форума Ответить с цитированием
Старый 10.01.2011, 00:00   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

какого лицевого счёта?
Вы имеете в виду корреспондентского счёта или расчётного счёта?
Или какой-то ещё счёт?

И чем помочь то?
что у Вас уже сделано, что получилось, что не получается?..

алгоритм вроде бы открыт - например, здесь.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2011, 00:57   #3
semen master
Новичок
Джуниор
 
Регистрация: 09.01.2011
Сообщений: 2
По умолчанию

вот задание -
дано-код БИК банка,номер р\с клиента,требуется найти алгоритм вычисление контрольного рязряда,составить программу реализующую два сценария работы:
а)БИК и номер счета вводятся в диалоге (форма)
б)пары БИК - номер счета вводятся из текстового файла.
буду очень признательна если поможете - это если говорить про точное задание которое должно быть реализовано в МВорд
А помочь ,например,может кто то делал уже такое ,может для кого то не трудно такое сделать , потому что я нашел на разных языках такую программу ,но только не для VBA
semen master вне форума Ответить с цитированием
Старый 10.01.2011, 03:39   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Код:
Public Function CheckSchet(s As String) As Boolean
    Const SM As String * 23 = "71371371371371371371371"    ' весовые коэффициенты
    Dim i As Integer, l As Integer
    CheckSchet = False
    If s Like String(Len(s), "#") Then Exit Function
    l = 0
    For i = 1 To 23
        l = l + CInt(Right$(CStr(CInt(Mid(s, i, 1)) * CInt(Mid(SM, i, 1))), 1))
    Next i
    CheckSchet = ((l Mod 10) = 0)
End Function

'Проверка корреспондентского счёта
Public Function CheckKS(ks As String, bik As String) As Boolean
    CheckKS = CheckSchet("0" + Mid$(bik, 5, 2) + ks)
End Function

'Проверка расчётного счёта
Public Function CheckRS(rs As String, bik As String) As Boolean
    CheckRS = CheckSchet(Right$(bik, 3) & rs)
End Function

Последний раз редактировалось Aent; 11.01.2011 в 02:45.
Aent вне форума Ответить с цитированием
Старый 10.01.2011, 10:27   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Aent - супер!

только один нюансик...
Цитата:
Код:
If s Like String(Len(v), "#") Then Exit Function
а что за Len(v) - это я чего-то не понимаю?
или это просто опечатка (и должно быть Len(s) ) ?
Прокомментируйте эту строчку, плиз...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.01.2011, 02:45   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Да. Конечно это опечатка. Должно быть len(s)
Cпасибо что обратили внимание.

Последний раз редактировалось Aent; 11.01.2011 в 02:53.
Aent вне форума Ответить с цитированием
Старый 11.01.2011, 02:57   #7
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Маленький довесок. Проверка ИНН. Возможно кому пригодится.
Код:
Function CheckINN_10(inn As String) As Boolean
    Dim INNMask
    INNMask = Array(2, 4, 10, 3, 5, 9, 4, 6, 8, 0)

    Dim c As Integer, i As Integer, summa As Integer

    For i = 1 To 10
        summa = summa + (CInt(Mid(inn, i, 1)) * INNMask(i - 1))    ' вычисляем контрольную сумму
    Next
    c = summa Mod 11    ' вычисляем контрольное число как остаток от деления контрольной суммы на 11
    If c > 9 Then  ' если контрольное число больше девяти вычисляем остаток от деления на 10
        c = c Mod 10
    End If
    CheckINN_10 = (c = CInt(Mid(inn, 10, 1)))    '  проверяем соответствие контрольного числа десятому знаку ИНН
End Function

Function CheckINN_12(inn As String) As Boolean
    Dim INNMask
    INNMask = Array(3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0)    ' весовые коэффициенты
    Dim C_11 As Integer, C_12 As Integer, i As Integer, summa As Integer

    For i = 1 To 11
        summa = summa + CInt(Mid(inn, i, 1)) * INNMask(i)  ' вычисляем контрольную сумму по 11-ти знакам
    Next

    C_11 = summa Mod 11    ' вычисляем контрольное число(1)
    If C_11 > 9 Then C_11 = C_11 Mod 10

    If (C_11 <> CInt(Mid(inn, 11, 1))) Then    '// проверяем соответствие контрольного числа(1) одиннадцатому знаку ИНН
        CheckINN_12 = True
        Exit Function
    End If
    summa = 0
    For i = 1 To 12
        summa = summa + CInt(Mid(inn, i, 1) * INNMask(i - 1))    ' // вычисляем контрольную сумму по 12-ти знакам
    Next i
    C_12 = summa Mod 11    ' // вычисляем контрольное число(2)
    If C_12 > 9 Then C_12 = C_12 Mod 10
    CheckINN_12 = (C_12 = CInt(Mid(inn, 12, 1)))    ' // проверяем соответствие контрольного числа(2) двенадцатому знаку ИНН
End Function

Последний раз редактировалось Aent; 11.01.2011 в 03:00.
Aent вне форума Ответить с цитированием
Старый 16.03.2011, 00:32   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Попросили функцию проверки ОГРН или ОГРНИП
Алгоритм элементарный. Единственная проблема - как получать остаток для
числа в формате Currency.
Надеюсь кому-нибудь ещё пригодится.
Код:
'Проверка номера ОГРН или ОГРНИП (Основной Государственный Регистрационный Номер (для Индивидуального Предпринимателя))
'Состоят из 13 (или 15) цифр, из них последняя - n1 - контрольная.
'Контрольная цифра равна остатку от деления на 11 (или на 13) числа,
'состоящего из первых 12 (или 14) цифр. Если остаток больше 9, то n1 = последней цифре остатка.

Public Function CheckOGRN(s As String) As Boolean
    Dim l As Long
    Dim k As Long
    Dim d1 As Currency
    Dim t As String
    l = Len(s)
    CheckOGRN = False
    If Not (l = 13 Or l = 15) Then Exit Function  'Неверная длина
    If Not s Like String(l, "#") Then Exit Function 'Присутствуют не цифры
    d1 = CCur(Left$(s, l - 1))
    l = l - 1
    t = CStr(d1 / l)
    k = InStr(t, Format$(0, "."))  'Проверяем есть ли десятичный разделитель
    If k > 0 Then t = Left$(t, k - 1) 'Если да - выделяем целую часть
    CheckOGRN = Right(CStr(d1 - l * CCur(t)), 1) = Right$(s, 1)
End Function

Последний раз редактировалось Aent; 16.03.2011 в 00:45.
Aent вне форума Ответить с цитированием
Старый 07.08.2012, 15:45   #9
leruan
Новичок
Джуниор
 
Регистрация: 07.08.2012
Сообщений: 1
По умолчанию

Исправленный и дополненный вариант проверки ИНН от Aent

Код:
Public Function CheckINN(inn As String) As Boolean
    Dim Len_INN As Integer
    Len_INN = Len(Trim(inn))
    If Not IsNumeric(inn) Then
        CheckINN = False
        Exit Function
    End If
    If Int(inn) = 0 Then
        CheckINN = False
        Exit Function
    End If
        
    If Len_INN = 10 Then
        CheckINN = CheckINN_10(inn)
        Exit Function
    End If
    If Len_INN = 12 Then
        CheckINN = CheckINN_12(inn)
        Exit Function
    End If
    CheckINN = False
End Function

Private Function CheckINN_10(inn As String) As Boolean
    Dim INNMask
    INNMask = Array(2, 4, 10, 3, 5, 9, 4, 6, 8, 0)

    Dim c As Integer, i As Integer, summa As Integer

    For i = 1 To 10
        summa = summa + (CInt(Mid(inn, i, 1)) * INNMask(i - 1))    ' вычисляем контрольную сумму
    Next
    c = summa Mod 11    ' вычисляем контрольное число как остаток от деления контрольной суммы на 11
    If c > 9 Then  ' если контрольное число больше девяти вычисляем остаток от деления на 10
        c = c Mod 10
    End If
    CheckINN_10 = (c = CInt(Mid(inn, 10, 1)))    '  проверяем соответствие контрольного числа десятому знаку ИНН
End Function

Private Function CheckINN_12(inn As String) As Boolean
    Dim INNMask
    INNMask = Array(3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0)    ' весовые коэффициенты
    Dim C_11 As Integer, C_12 As Integer, i As Integer, summa As Integer

    For i = 1 To 10
        summa = summa + CInt(Mid(inn, i, 1)) * INNMask(i)  ' вычисляем контрольную сумму по 11-ти знакам
    Next

    C_11 = summa Mod 11    ' вычисляем контрольное число(1)
    If C_11 > 9 Then C_11 = C_11 Mod 10

    If (C_11 <> CInt(Mid(inn, 11, 1))) Then    '// проверяем соответствие контрольного числа(1) одиннадцатому знаку ИНН
        CheckINN_12 = False
        Exit Function
    End If
    summa = 0
    For i = 1 To 11
        summa = summa + CInt(Mid(inn, i, 1) * INNMask(i - 1))    ' // вычисляем контрольную сумму по 12-ти знакам
    Next i
    C_12 = summa Mod 11    ' // вычисляем контрольное число(2)
    If C_12 > 9 Then C_12 = C_12 Mod 10
    CheckINN_12 = (C_12 = CInt(Mid(inn, 12, 1)))    ' // проверяем соответствие контрольного числа(2) двенадцатому знаку ИНН
End Function

Последний раз редактировалось leruan; 07.08.2012 в 15:49.
leruan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление всех ячеек и столбцов после контрольного значения. RIPASSW Microsoft Office Excel 2 10.11.2010 09:35
Изменение ключа таблицы Droid Помощь студентам 7 20.03.2010 18:15
Удаление ключа реестра dolphin705 Общие вопросы Delphi 6 16.03.2009 16:39
вывод первичного ключа ZBoris SQL, базы данных 3 09.02.2009 17:38
Ввод ключа! }{oт@бь)ч Общие вопросы Delphi 9 08.02.2009 12:11