Delphi-Projects

Форк
0
/
BICLSKey.pas 
74 строки · 1.8 Кб
1
unit BICLSKey;
2

3
interface
4

5
function CalcLSKey(const BIC, LS: string): Char;
6
function CalcKSKey(const BIC, KS: string): Char;
7
function ValidLSKey(const BIC, LS: string): Boolean;
8
function ValidKSKey(const BIC, KS: string): Boolean;
9
function IsRKC(const BIC: string): Boolean;
10

11
implementation
12
uses
13
  SysUtils, StrUtils;
14

15
function InternalCalcLSKey(const BICLS: string): Char;
16
var
17
  B: array[1..23] of Byte;
18
  I: Integer;
19
  Sum: Integer;
20
begin
21
  for I := 1 to 23 do
22
    B[I] := Byte(BICLS[I]) - 48; //Asc('0')
23
  B[12] := 0; //default key = 0 for recalculation
24
  Sum := 0;
25
  for I := 1 to 23 do
26
  begin
27
    if (I mod 3) = 1 then
28
      Inc(Sum, B[I] * 7 mod 10)
29
    else if (I mod 3) = 2 then
30
      Inc(Sum, B[I] {* 1} mod 10)
31
    else {I mod 3 = 0}
32
      Inc(Sum, B[I] * 3 mod 10);
33
  end;
34
  Result := Char(Sum * 3 mod 10 + 48);
35
end;
36

37
function CalcLSKey(const BIC, LS: string): Char;
38
begin
39
  if IsRKC(BIC) then
40
    Result := InternalCalcLSKey('0' + Copy(BIC, 5, 2) + LS)
41
  else
42
    Result := InternalCalcLSKey(Copy(BIC, 7, 3) + LS);
43
end;
44

45
function CalcKSKey(const BIC, KS: string): Char;
46
begin
47
  if not IsRKC(BIC) then //inverted to LS
48
    Result := InternalCalcLSKey('0' + Copy(BIC, 5, 2) + KS)
49
  else
50
    Result := InternalCalcLSKey(Copy(BIC, 7, 3) + KS);
51
end;
52

53
function ValidLSKey(const BIC, LS: string): Boolean;
54
begin
55
  if IsRKC(BIC) then
56
    Result := (InternalCalcLSKey('0' + Copy(BIC, 5, 2) + LS) = LS[9])
57
  else
58
    Result := (InternalCalcLSKey(Copy(BIC, 7, 3) + LS) = LS[9]);
59
end;
60

61
function ValidKSKey(const BIC, KS: string): Boolean;
62
begin
63
  if not IsRKC(BIC) then
64
    Result := (InternalCalcLSKey('0' + Copy(BIC, 5, 2) + KS) = KS[9])
65
  else
66
    Result := (InternalCalcLSKey(Copy(BIC, 7, 3) + KS) = KS[9]);
67
end;
68

69
function IsRKC(const BIC: string): Boolean;
70
begin
71
  Result := StrToInt(AnsiRightStr(BIC, 3)) < 5;
72
end;
73

74
end.
75

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

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

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

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