function Modulo97(s: string): integer;
var
v, l : integer;
alpha : string;
number : longint;
begin
v := 1;
l := 9;
Result := 0;
alpha := '';
while (v <= Length(s)) do
begin
if (l > Length(s)) then
l := Length(s);
alpha := alpha + Copy(s, v, l);
number := StrToInt(alpha);
Result := number mod 97;
v := v + l;
alpha := IntToStr(Result);
l := 9 - Length(alpha);
end;
end;
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 IBANValido(IBAN: string): boolean;
var
l : integer;
begin
Result := True;
IBAN := UpperCase(IBAN);
for l := 1 to Length(IBAN) do
if (not (IBAN[l] in ['A'..'Z', '0'..'9'])) then
Result := False;
if (Result) then
begin
IBAN := IBAN + Copy(IBAN, 1, 4);
Delete(IBAN, 1, 4);
iban := ChangeAlpha(IBAN);
Result := (Modulo97(IBAN) = 1);
end;
end;
procedure Limpia_IBAN;
var
l : integer;
TmpIBAN : string;
begin
while ??? do
begin
IBAN := ???;
IBAN := UpperCase(IBAN);
for l := 1 to Length(IBAN) do
if ((IBAN[l] in ['A'..'Z', '0'..'9'])) then
TmpIBAN := TmpIBAN + IBAN[i];
if IBANValido(TmpIBAN) then
begin
???
end
else
begin
ShowMessage('Revisar: ' + IBAN);
end;
end;
end;