Delphi-Projects

Форк
0
/
INNKey.pas 
86 строк · 1.6 Кб
1
unit INNKey;
2

3
interface
4

5
function ValidINNKey(const INN: string): Boolean;
6

7
implementation
8

9
function ValidINNKey(const INN: string): Boolean;
10
var
11
  B: array[1..12] of Byte;
12
  I: Integer;
13
  Sum: Integer;
14
  S: string;
15
begin
16
  if (Length(INN) = 0) or (INN = '0') then
17
  begin
18
    Result := True;
19
    Exit;
20
  end;
21

22
  if INN[1] = 'F' then
23
  begin
24
    S := INN;
25
    Delete(S, 1, 1);
26
    Result := ValidINNKey(S);
27
    Exit;
28
  end;
29

30
  for I := 1 to Length(INN) do
31
    B[I] := Byte(INN[I]) - 48; //Asc('0')
32
  if Length(INN) = 10 then
33
  begin
34
    Sum := 0;
35
    Inc(Sum, B[1] * 2);
36
    Inc(Sum, B[2] * 4);
37
    Inc(Sum, B[3] * 10);
38
    Inc(Sum, B[4] * 3);
39
    Inc(Sum, B[5] * 5);
40
    Inc(Sum, B[6] * 9);
41
    Inc(Sum, B[7] * 4);
42
    Inc(Sum, B[8] * 6);
43
    Inc(Sum, B[9] * 8);
44
    Sum := Sum mod 11 mod 10;
45
    Result := B[10] = Sum;
46
  end
47
  else if Length(INN) = 12 then
48
  begin
49
    Sum := 0;
50
    Inc(Sum, B[1] * 7);
51
    Inc(Sum, B[2] * 2);
52
    Inc(Sum, B[3] * 4);
53
    Inc(Sum, B[4] * 10);
54
    Inc(Sum, B[5] * 3);
55
    Inc(Sum, B[6] * 5);
56
    Inc(Sum, B[7] * 9);
57
    Inc(Sum, B[8] * 4);
58
    Inc(Sum, B[9] * 6);
59
    Inc(Sum, B[10] * 8);
60
    Sum := Sum mod 11 mod 10;
61
    if B[11] <> Sum then
62
      Result := False
63
    else
64
    begin
65
      //B[11] := Sum;
66
      Sum := 0;
67
      Inc(Sum, B[1] * 3);
68
      Inc(Sum, B[2] * 7);
69
      Inc(Sum, B[3] * 2);
70
      Inc(Sum, B[4] * 4);
71
      Inc(Sum, B[5] * 10);
72
      Inc(Sum, B[6] * 3);
73
      Inc(Sum, B[7] * 5);
74
      Inc(Sum, B[8] * 9);
75
      Inc(Sum, B[9] * 4);
76
      Inc(Sum, B[10] * 6);
77
      Inc(Sum, B[11] * 8);
78
      Sum := Sum mod 11 mod 10;
79
      Result := B[12] = Sum;
80
    end;
81
  end
82
  else
83
    Result := False;
84
end;
85

86
end.
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.