Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как проверить правильность International Bank Account Number?

01.01.2007
// IBAN = International Bank Account Number 
// Example : CH10002300A1023502601
 
function ChangeAlpha(input: string): string;
 
// A -> 10, B -> 11, C -> 12 ...
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 CheckIBAN(iban: string): Boolean;
begin
  iban
:= StringReplace(iban, ' ', '', [rfReplaceAll]);
 
if CalculateDigits(iban) = 1 then
   
Result := True
 
else
   
Result := False;
end;

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php