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