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;