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;
Ważne artykuły