|
|
|
Перевод кода в VBA из Delphi
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Такая задача: мне дали код программы, которая работает в 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.08.2008, 21:56 |
|
||
|
Перевод кода в VBA из Delphi
|
|||
|---|---|---|---|
|
#18+
Разбираться с твоим кодом лень, потому держи просто функцию проверки ИНН: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=182&tid=2161942]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 401ms |

| 0 / 0 |
