Viernes, 20 de mayo de 2011

Validar número de cuenta bancaria

Es muy común querer validar un numero de cuenta bancaria para evitar errores de transcripción. Si nos fijamos un número de cuenta esta formado por 20 dígitos, separados en 4 bloques:

1234-1234-12-1234567890

Los 4 primeros dígitos corresponden al banco, los siguientes 4 a la sucursal, los 2 siguientes son los dígitos de control, y los últimos 10 son el número de cuenta dentro de la sucursal.

Para validar la cuenta se utilizan los dos dígitos de control, siendo el primero necesario para validar los 8 primeros (banco y sucursal), y el segundo para validar los últimos 10 (del número de cuenta).

A continuación vamos a calcular los dígitos de control para la cuenta ficticia que hemos puesto antes, de esta forma comprobaremos si los dígitos de control de arriba son erroneos:
banco: 1234
sucursal: 1234
cuenta: 1234567890

Antes de comenzar necesitamos saber la siguiente lista de pesos:
1, 2, 4, 8, 5, 10, 9, 7, 3, 6

Empezamos con el primer dígito de control:
Cogemos los 4 dígitos del banco y sucursal, 12341234 y como tenemos 10 pesos (listados antes), añadimos dos ceros delante 0012341234, y multiplicamos cada dígito por su peso correspondiente, el orden vienen dado por la posición que ocupan, es decir, el primer número por el primero peso, el segundo número por el segundo peso... cada resultado lo sumamos para obtener un solo número.
(0 * 1) + (0 * 2) + (1 * 4) + (2 * 8) + (3 * 5) + (4 * 10) + (1 * 9) + (2 * 7) + (3 * 3) + (4 * 6) = 4 + 16 + 15 + 40 + 9 + 14 + 9 + 24 = 131

Ahora hacemos la siguiente operación para obtener el primer número del dígito de control:
11 - (131 mod 11) = 11 - 10 = 1

Y para obtener el segundo dígito de control operamos de la misma forma multiplicando los 10 dígitos de la cuenta por su peso correspondiente, sumando estos resultados, y haciendo la resta con el modulo de 11:
(1 * 1) + (2 * 2) + (3 * 4) + (4 * 8) + (5* 5) + (6 * 10) + (7 * 9) + (8 * 7) + (9 * 3) + (0 * 6) = 1 + 4 + 12 + 32 + 25 + 60 + 63 + 56 + 27 + 0 = 280

11 - (280 mod 11) = 11 - 5 = 6

Por tanto los dígitos de control son el valor 16, y no 12 como habíamos puesto al principio. Suele ser típico que necesitemos validar esto en javascript en un formulario, por ello a continuación un ejemplo de función que lo haría:
function calculaDigito(valores) {
     pesos = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
     d = 0;
     for (i=0; i<=9; i++) {
       d += parseInt(valores.charAt(i)) * pesos[i];
     }
     d = 11 - (d % 11);
     if (d==11) d=0;
     if (d==10) d=1;
     return d;
}
A esta función habría que llamarla dos veces, primero con los 8 primeros numeros (banco y sucursal) mas dos ceros delante, y luego con los 10 números de la cuenta, y ya tendríamos los dígitos de control.

deja tu comentario:

Enviar