Delphi-Projects
86 строк · 1.6 Кб
1unit INNKey;
2
3interface
4
5function ValidINNKey(const INN: string): Boolean;
6
7implementation
8
9function ValidINNKey(const INN: string): Boolean;
10var
11B: array[1..12] of Byte;
12I: Integer;
13Sum: Integer;
14S: string;
15begin
16if (Length(INN) = 0) or (INN = '0') then
17begin
18Result := True;
19Exit;
20end;
21
22if INN[1] = 'F' then
23begin
24S := INN;
25Delete(S, 1, 1);
26Result := ValidINNKey(S);
27Exit;
28end;
29
30for I := 1 to Length(INN) do
31B[I] := Byte(INN[I]) - 48; //Asc('0')
32if Length(INN) = 10 then
33begin
34Sum := 0;
35Inc(Sum, B[1] * 2);
36Inc(Sum, B[2] * 4);
37Inc(Sum, B[3] * 10);
38Inc(Sum, B[4] * 3);
39Inc(Sum, B[5] * 5);
40Inc(Sum, B[6] * 9);
41Inc(Sum, B[7] * 4);
42Inc(Sum, B[8] * 6);
43Inc(Sum, B[9] * 8);
44Sum := Sum mod 11 mod 10;
45Result := B[10] = Sum;
46end
47else if Length(INN) = 12 then
48begin
49Sum := 0;
50Inc(Sum, B[1] * 7);
51Inc(Sum, B[2] * 2);
52Inc(Sum, B[3] * 4);
53Inc(Sum, B[4] * 10);
54Inc(Sum, B[5] * 3);
55Inc(Sum, B[6] * 5);
56Inc(Sum, B[7] * 9);
57Inc(Sum, B[8] * 4);
58Inc(Sum, B[9] * 6);
59Inc(Sum, B[10] * 8);
60Sum := Sum mod 11 mod 10;
61if B[11] <> Sum then
62Result := False
63else
64begin
65//B[11] := Sum;
66Sum := 0;
67Inc(Sum, B[1] * 3);
68Inc(Sum, B[2] * 7);
69Inc(Sum, B[3] * 2);
70Inc(Sum, B[4] * 4);
71Inc(Sum, B[5] * 10);
72Inc(Sum, B[6] * 3);
73Inc(Sum, B[7] * 5);
74Inc(Sum, B[8] * 9);
75Inc(Sum, B[9] * 4);
76Inc(Sum, B[10] * 6);
77Inc(Sum, B[11] * 8);
78Sum := Sum mod 11 mod 10;
79Result := B[12] = Sum;
80end;
81end
82else
83Result := False;
84end;
85
86end.
87