IBAN szám ellenőrzése Delphi -vel
You are Reading..
IBAN szám ellenőrzése Delphi -vel
Az eredeti ellenőrző algoritmust nem nagyon írtam át, csak beletettem az országkódokat.
function ChangeAlpha(input: string): string;
var a: Char;
begin
Result := input;
for a := 'A' to 'Z' do
begin
Result := StringReplace(Result, a, IntToStr(Ord(a) - 55), [rfReplaceAll]);
end;
end;
function CalculateDigits(iban: string): Integer;
var v, l: Integer;
alpha: string;
number: Longint;
rest: Integer;
begin
iban := UpperCase(iban);
if Pos('IBAN', iban) > 0 then
Delete(iban, Pos('IBAN', iban), 4);
iban := iban + Copy(iban, 1, 4);
Delete(iban, 1, 4);
iban := ChangeAlpha(iban);
v := 1;
l := 9;
rest := 0;
alpha := '';
try
while v <= Length(iban) do
begin
if l > Length(iban) then
l := Length(iban);
alpha := alpha + Copy(iban, v, l);
number := StrToInt(alpha);
rest := number mod 97;
v := v + l;
alpha := IntToStr(rest);
l := 9 - Length(alpha);
end;
except
rest := 0;
end;
Result := rest;
end;
function IndexOf(stringArray: array of string; partString: String): integer;
var i: Integer;
begin
Result := -1;
for i:=0 to Length(stringArray) do
begin
if stringArray[i] = partString then
begin
Result := i;
break;
end;
end;
end;
function CheckIBAN(iban: string; justcountrycode: boolean): Boolean;
const countrycodes: array[1..54] of string = ('AD','AE','AL','AT','BA','BE','BG','CH','CY','CZ','DE','DK',
'EE','ES','FI','FO','FR','GB','GE','GI','GL','GR','HR','HU','IE','IL','IS',
'IT','KW','KZ','LB','LI','LT','LU','LV','MC','ME','MK','MR','MT','MU','NL',
'NO','PL','PT','RO','RS','SA','SE','SI','SK','SM','TN','TR');
begin
Result := true;
iban := StringReplace(iban, ' ', '', [rfReplaceAll]);
iban := StringReplace(iban, '-', '', [rfReplaceAll]);
if IndexOf(countrycodes, Copy(iban,1,2)) < 0 then
begin
Result := false;
Exit;
end;
if justcountrycode then Exit;
if CalculateDigits(iban) = 1 then
Result := True
else
Result := False;
end;