Cálculo digitos control IBAN

IBAN es el acrónimo de _International Bank Account Number_, es una norma por la cual se identifica una cuenta bancaria de cualquier pais (aunque de momento sólo se utiliza en Europa). Más información en la “wikipedia”:http://es.wikipedia.org/wiki/International_Bank_Account_Number

Hoy he tenido que modificar una aplicación que prepara un fichero XML para enviar a un organismo público, en ese fichero habí­a que indicar el código IBAN de unas cuentas bancarias. Resulta que donde esta aplicación tienen como 50 cuentas bancarias y además hay que indicar cuentas de terceros. Tenemos los digitos de entidad, oficina y cuenta de cada una, pero no el IBAN. He buscado información y he visto que como se calculaba, me he puesto manos a la obra y este es el resultado:

{--
Devuelve el código IBAN que corresponde con la cuenta y el paí­s que se le pasa
Ver http://www.desarrolloweb.com/articulos/2484.php y http://www.sima.cat/chkiban.php
--}
function ControlIBAN(const Cuenta, Pais: string): string;
var
  i, j: integer;
  m: int64;
  l: TInteger;
  t: string;
  s: string;
 
  function LetterToDigit(const C: Char): string;
  const
    a: char = 'A';
  var
    d: byte;
  begin
    result := C;
    if C in ['A'..'Z'] then
    begin
      d := (byte(C) – byte(a)) + 10;
      result := IntToStr(d);
    end;
  end;
 
begin
 
  l := TInteger.Create;
  try
 
    t := Cuenta + Pais + '00';
    s := '';
    j := Length(t);
    for i := 1 to j do
      s := s + LetterToDigit(t[i]);
 
    l.Assign(s);
    l.Modulo(97);
    l.ConvertToInt64(m);
    i := 98 – m;
 
    result := IntToStr(i);
    if i < 10 then
      result := '0' + result;
 
  finally
    l.Free;
  end;
 
end;
 
function FormateaIBAN(const Cuenta, Pais: string): string;
begin
  result := Pais + ControlIBAN(Cuenta, Pais) + Cuenta;
end;

Requiere la "librerí­a DFF":http://www.delphiforfun.org/programs/Library/Default.htm