Cálculo del dígito de control en una cuenta corriente.

Un número de cuenta corriente se compone de 20 dígitos:

BBBBSSSSddCCCCCCCCCC
Donde B son los cuatro dígitos del banco, S los cuatro de la sucursal, d los dos del dígito de control que queremos calcular y C los diez propios de la cuenta corriente.

A cada valor se le asigna un « peso » que es constante;

Apesos : array[1..10] of integer = (1,2,4,8,5,10,9,7,3,6); // Array de "pesos"

Y a partir de aquí los cálculos son: la suma de los ocho digitos de la izquierda*peso de cada dígito, el total se divide entre 11, el resto se deduce de 11 y el resultado es el D.C. primero, con la salvedad de que si 11-resto=10 el DC=1 y se 11-resto=11 el DC=0

Lo mismo con los 10 dígitos de la c/c, que darán el D.C. segundo. Entre los dos forman el D.C.

Function CalculoCC(IentOfi,InumCta:String ) : String;

var
   Digito,DigControl : String;
   X : Byte;
   DC1,DC2,Resto : Extended;
begin
   DC1:=0;
   DC2:=0;
   x:=8;
   Repeat
      digito:=copy(IEntOfi,x,1);
      DC1:=DC1+(APesos[x+2]*StrtoInt(digito));
      inc(x,-1);
   until x=0;
   Resto := DC1-(11*(int(DC1/11)));

    DC1:=11-Resto;
    if DC1=10 then DC1:=1;
    if DC1=11 then DC1:=0;              // Dígito control Entidad-Oficina

    x:=10;
    Repeat
       digito:=copy(INumCta,x,1);
       DC2:=DC2+(APesos[x]*StrtoInt(digito));
       inc(x,-1);
    until x=0;
    Resto := DC2-(11*(int(DC2/11)));
    DC2:=11-Resto;
    if DC2=10 then DC2:=1;
    if DC2=11 then DC2:=0;         // Dígito Control C/C

    DigControl:=FloattoStr(DC1)+FloattoStr(DC2);   // los 2 números del D.C.
    Result:=DigControl;
End;