|
Los números de cuenta bancaria en España llevan un par de dígitos de control para evitar posibles problemas de transcripción.
La forma de validarlos es muy sencilla. En primer lugar, debemos darnos cuenta de que un número de cuenta completo está formado por varias partes: - 4 dígitos que identifican a la entidad bancaria
- 4 dígitos que identifican a la sucursal
- 2 dígitos de control
- 10 dígitos que son el número de cuenta dentro de la sucursal
En total, 20 dígitos. A este tipo de numeración de cuentas bancarias se le denomina clave SICA. El primero de los dígitos de control se calcula a partir de los cuatro dígitos de la entidad más los cuatro dígitos de la sucursal. El segundo dígito de control se calcula a partir de los diez dígitos de la cuenta. El algoritmo es de tipo checksum, en el que se multiplica cada dígito de la cuenta empezando por el de más a la derecha por un peso específico que se obtiene de la siguiente tabla según su posición. Estas multiplicaciones se suman y si el resultado es s, se el dígito de control se calcula de la siguiente manera: Tabla de pesos. La primera fila es la posición (por la derecha), y la segunda el peso.
Por ejemplo, supongamos la siguiente cuenta (ficticia, desde luego): Entidad: 9080 Sucursal: 1234 Cuenta: 102030 Para hallar el primer dígito de control, concatenamos la entidad y la sucursal: 90801234 Necesitamos que la sucursal tenga cuatro dígitos. Si la sucursal no tuvieran cuatro, se rellena con ceros a la izquierda. Recorremos la cadena de derecha a izquierda, multiplicando por los pesos: suma=4*6 + 3*3 + 2*7 + 1*9 + 0*10 + 8*5 + 0*8 + 9*4 = 24+9+14+9+0+40+0+36= 132 Como la concatenación de entidad y sucursal tiene ocho dígitos como máximo y la tabla 10, no utilizamos los dos últimos. Finalmente, el primer dígito de control viene dado por dc1=11-(132 mod 11)=11-0=11 Cuando este resultado parcial el 11, lo sustituimos por 0, así que en esta caso, el primer dígito de control es 0.
El segundo dígito de control se obtiene de manera análoga, pero para ello se utilizan los 10 dígitos del número de cuenta. Como la tabla tiene 10 pesos, en esta ocasión se utiliza toda la tabla. Si la cuenta no tuviera 10 dígitos, simplemente no se utiliza toda la tabla. En nuestro caso, la cuenta es 102030, así que la suma es suma=0*6 + 3*3 + 0*7 + 2*9 + 0*10 + 1*5=0+9+0+18+0+5=32 El segundo dígito de control sería dc2=11-(suma mod 11)=11-10=1
Observa este fragmento de código en C#. El método dc aplica el algoritmo de los pesos al entero i. Como este algoritmo se aplica dos veces (una para entidad concatenado con sucursal y otra para la cuenta) se ha codificado en un método aparte. El método DigitosControl es el encargado de invocarlo. En esta ocasión, tanto la entidad como la sucursal como la cuenta la hemos captado con enteros, sin realizar conversiones a cadena. static int dc(long i) {
int[] pesos={6,3,7,9,10,5,8,4,2,1};
int contador = 0;
long s=0, d;
while (i != 0)
{
d = i % 10;
i = i / 10;
s += d * pesos[contador];
contador++;
}
int resultado=(int)(11-(s % 11));
if (resultado==10)
resultado=1;
else if (resultado==11)
resultado=0;
return resultado;
}
static int DigitosControl(int entidad, int sucursal, long cuenta) {
long d = dc(entidad * 10000 + sucursal);
d = d * 10;
d += dc(cuenta);
return (int)d;
}
|