Cómo validar los números de cuenta tanto nacionales como internacionales.
Validación del CCC (Código Cuenta Cliente):
El resultado de esta operación debería coincidir con el segundo dígito de control.
Ejemplo en PHP:
function esCorrecto(numeroCuenta){
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
controlCS,controlCC = 0;
for (i=0; i<=7; i++)
controlCS += parseInt(numeroCuenta.charAt(i)) * valores[i+2];
controlCS = 11 - (controlCS % 11);
if (controlCS == 11) controlCS = 0;
else if (controlCS == 10) controlCS = 1;
for (i=10; i<=19; i++)
controlCC += parseInt(numeroCuenta.charAt(i)) * valores[i-10];
controlCC = 11 - (controlCC % 11);
if (controlCC == 11) controlCC = 0;
else if (controlCC == 10) controlCC = 1;
if (numeroCuenta.charAt(8)==controlCS && numeroCuenta.charAt(9)==controlCC ) {
return true;
}else{
return false;
}
}
Validación de dígito de control IBAN:
A continuación vamos a validar el dígito de control de un número de cuenta de un cliente de Bélgica. Como podemos ver en la tabla de códigos de cuenta, el formato para este país es:
BE XX seguido de un número de 12 dígitos, siendo XX los dos dígitos de control. El mecanismo que habrá que realizar es el siguiente:
Generación del dígito de control IBAN:
- Para validar el Código de banco y de sucursal, se multiplica, cada una de sus cifras por 4,8,5,10 y 9,7,3,6 y se suman los resultados.
- Se resta 11 a la cifra resultante de poner en módulo 11 el resultado de la suma anterior
- Si el numero resultante es 11, el dígito de control será 0, y si es 10, será 1.
El resultado de esta operación debería coincidir con el primer dígito de control.
- Para validar el número de cuenta, se multiplica cada una de sus cifras por 1,2, 4,8,5,10,9,7,3,6 y se suman los resultados.
- Se resta 11 a la cifra resultante de poner en módulo 11 el resultado de la suma anterior
- Si el numero resultante es 11, el dígito de control será 0, y si es 10, será 1.
El resultado de esta operación debería coincidir con el segundo dígito de control.
Ejemplo en PHP:
function esCorrecto(numeroCuenta){
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
controlCS,controlCC = 0;
for (i=0; i<=7; i++)
controlCS += parseInt(numeroCuenta.charAt(i)) * valores[i+2];
controlCS = 11 - (controlCS % 11);
if (controlCS == 11) controlCS = 0;
else if (controlCS == 10) controlCS = 1;
for (i=10; i<=19; i++)
controlCC += parseInt(numeroCuenta.charAt(i)) * valores[i-10];
controlCC = 11 - (controlCC % 11);
if (controlCC == 11) controlCC = 0;
else if (controlCC == 10) controlCC = 1;
if (numeroCuenta.charAt(8)==controlCS && numeroCuenta.charAt(9)==controlCC ) {
return true;
}else{
return false;
}
}
Validación de dígito de control IBAN:
A continuación vamos a validar el dígito de control de un número de cuenta de un cliente de Bélgica. Como podemos ver en la tabla de códigos de cuenta, el formato para este país es:
BE XX seguido de un número de 12 dígitos, siendo XX los dos dígitos de control. El mecanismo que habrá que realizar es el siguiente:
- Mover los cuatro primeros caracteres del número IBA a la derecha:
Ej: BE89 9999 9999 9999 -> 999999999999BE89
- Convertir las letras a números según la siguiente tabla:
A=10 G=16 M=22 S=28 Y=34 B=11 H=17 N=23 T=29 Z=35 C=12 I=18 O=24 U=30 D=13 J=19 P=25 V=31 E=14 K=20 Q=26 W=32 F=15 L=21 R=27 X=33
Ej: 999999999999BE89 -> 999999999999111489
- Sobre el número resultante, calcular el módulo 97, si el resultado es correcto, la operación dará como resultado 1.
Generación del dígito de control IBAN:
- Componer el código IBAN de cuenta con dos dígito de control 0.
Ej: IBAN BEXX 9999-9999-9999 -> BE00999999999999
- Mover los cuatro primeros caracteres del número a la derecha.
Ej: BE00999999999999 -> 999999999999BE00
- Convertir las letras en caracteres numéricos de acuerdo con la tabla de conversión.
Ej: 999999999999BE00 ->999999999999111400
- Aplicar la operación módulo 97 y eliminar al resultado 98. Si el resultado consta de sólo un dígito, insertar un cero a la izquierda.
Ej: 98 - 9 = 89; IBAN = BE89999999999999
Carlos Luis Cuenca
Carlos es ingeniero informático por la UPM (Politécnico de Madrid), especializad...