powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перевод кода в VBA из Delphi
2 сообщений из 2, страница 1 из 1
Перевод кода в VBA из Delphi
    #35493671
kristin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Такая задача: мне дали код программы, которая работает в Delphi(см приложение 1), она проверяет правильность ИНН в соответствии с приведенным алгоритмом. Мне нужно перетащить этот код в макрос в VBA в Excel(е), чтобы он работал. В Excel(е) есть столбец ИНН, нужно чтоб при запуске макроса шла проверка на соответствие ИНН данным условиям, если ИНН не проходит проверку, то в столбце напротив выдавалось сообщение об ошибке.
Я просто совсем не владею Delphi, а время на изучение нет совсем, отчет нужно сдать на днях. Поэтому очень надеюсь на вашу помощь!

Пример: ИНН Сообщение об ошибке:
7740000051
6163024016
111111 Ошибочное ИНН
3443051345
3603006255

Рабочий код программы в Delphi:

unit checkINN;
interface
uses SysUtils, Dialogs;

type
TDinamicIntArr = array [1..11] of Integer;

function isINNValid(INN: String): Boolean;

implementation

function isINNValid(INN: String): Boolean;
var mult_10, mult_12_1, mult_12_2 : TDinamicIntArr;
SumMult1, SumMult2, Kontr1, Kontr2, i: Integer;
begin
SumMult1:=0;
SumMult2:=0;

//Массив множителей для 10-значного ИНН
mult_10[1]:=2;
mult_10[2]:=4;
mult_10[3]:=10;
mult_10[4]:=3;
mult_10[5]:=5;
mult_10[6]:=9;
mult_10[7]:=4;
mult_10[8]:=6;
mult_10[9]:=8;
//************************************

//Массив множителей для 12-значного ИНН (1 контр.цифра)
mult_12_1[1]:=7;
mult_12_1[2]:=2;
mult_12_1[3]:=4;
mult_12_1[4]:=10;
mult_12_1[5]:=3;
mult_12_1[6]:=5;
mult_12_1[7]:=9;
mult_12_1[8]:=4;
mult_12_1[9]:=6;
mult_12_1[10]:=8;
//************************************

//Массив множителей для 12-значного ИНН (2 контр.цифра)
mult_12_2[1]:=3;
mult_12_2[2]:=7;
mult_12_2[3]:=2;
mult_12_2[4]:=4;
mult_12_2[5]:=10;
mult_12_2[6]:=3;
mult_12_2[7]:=5;
mult_12_2[8]:=9;
mult_12_2[9]:=4;
mult_12_2[10]:=6;
mult_12_2[11]:=8;
//************************************

if( length(INN)=10 ) then
begin
//10 значный ИНН
for i:=1 to 9 do
begin
SumMult1:=SumMult1 + ( StrToInt(Copy(INN, i, 1)) * mult_10 );
end;

Kontr1:=(SumMult1 mod 11) mod 10;

if( Kontr1 = StrToInt(Copy(INN, Length(INN), 1)) ) then
begin Result:=True; end
else
begin Result:=False; end;
end
else
begin
//12 значный ИНН
for i:=1 to 10 do
begin
SumMult1:=SumMult1 + ( StrToInt(Copy(INN, i, 1)) * mult_12_1 );
end;

Kontr1:=(SumMult1 mod 11) mod 10;

for i:=1 to 11 do
begin
SumMult2:=SumMult2 + ( StrToInt(Copy(INN, i, 1)) * mult_12_2 );
end;

Kontr2:=(SumMult2 mod 11) mod 10;

if( (Kontr1 = StrToInt(Copy(INN, Length(INN)-1, 1))) AND (Kontr2 = StrToInt(Copy(INN, Length(INN), 1))) ) then
begin Result:=True; end
else
begin Result:=False; end;
end;

end;
end.
...
Рейтинг: 0 / 0
Перевод кода в VBA из Delphi
    #35495508
AndrF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираться с твоим кодом лень, потому держи просто функцию проверки ИНН:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
Public Function ПроверкаИНН(sInn As String) As Boolean
    sInn = Trim$(sInn)
    Select Case Len(sInn)
        Case  10 : ПроверкаИНН = ПроверкаИНН10(sInn)
        Case  12 : ПроверкаИНН = ПроверкаИНН12(sInn)
    End Select
End Function

Private Function ПроверкаИНН10(sInn As String) As Boolean
    Dim i As Integer, s As String, j As Integer, v As Variant
    
    v = Array( 2 ,  4 ,  10 ,  3 ,  5 ,  9 ,  4 ,  6 ,  8 ,  0 )
    For i =  1  To  10 
        s = Mid$(sInn, i,  1 )
        If Not IsNumeric(s) Then Exit Function
        j = j + CInt(v(i -  1 )) * CInt(s)
    Next i
    j = j Mod  11 
    If j >  9  Then j = j Mod  10 
    ПроверкаИНН10 = (j = CInt(s))
End Function

Private Function ПроверкаИНН12(sInn As String) As Boolean
    Dim i As Integer, s As String, j As Integer, v As Variant
    
    v = Array( 3 ,  7 ,  2 ,  4 ,  10 ,  3 ,  5 ,  9 ,  4 ,  6 ,  8 ,  0 )
    
    For i =  1  To  12 
        s = Mid$(sInn, i,  1 )
        If Not IsNumeric(s) Then Exit Function
        j = j + CInt(v(i -  1 )) * CInt(s)
    Next i
    j = j Mod  11 
    If j >  9  Then j = j Mod  10 
    If j <> CInt(s) Then Exit Function
    
    j =  0 
    For i =  1  To  11 
        j = j + CInt(v(i)) * CInt(Mid$(sInn, i,  1 ))
    Next i
    j = j Mod  11 
    If j >  9  Then j = j Mod  10 
    
    ПроверкаИНН12 = (j = CInt(s))
End Function
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перевод кода в VBA из Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]