1 .
Cuenta de la vieja
2 .
Validación completa
En España, las cuentas bancarias se identifican por un número de 20 cifras. De ellas,
4 identifican al banco, 4 a la sucursal donde abrimos la cuenta, 10 a la cuenta en sí y otros 2
se incluyen como dígitos de control para validar el número. Vamos a estudiar cómo validar estos
dígitos.
Cuenta de la vieja
Cada dígito de control valida una cosa. El primero se encarga del banco y sucursal y el segundo
del número de cuenta. Para validarlo otorgan a cada cifra un peso (es decir, un número distinto por
el que multiplicarla) y suman los resultados. Luego, al número resultante le hacen una serie de
perrerías para convertirlo en una sola cifra. En definitiva, esta es la función que, a partir de una
cadena que contiene un número de diez cifras, devuelve el dígito de control correspondiente:
function obtenerDigito(valor){
valores = new Array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
control = 0;
for (i=0; i<=9; i++)
control += parseInt(valor.charAt(i)) * valores[i];
control = 11 - (control % 11);
if (control == 11) control = 0;
else if (control == 10) control = 1;
return control;
}
Esta será la base de nuestro sistema. Pero antes de esto tendremos que habernos asegurado de que
el valor que le pasamos cumple los requisitos.
Validación completa
Tenemos aún que hacer algunas cosas más. Aparte de comprobar los dígitos de control, antes
deberemos asegurarnos de que el usuario ha rellenado completamente los campos con número. Para ello
nos serviremos de la siguiente función:
function numerico(valor){
cad = valor.toString();
for (var i=0; i<cad.length; i++) {
var caracter = cad.charAt(i);
if (caracter<"0" || caracter>"9")
return false;
}
return true;
}
De modo que ahora sólo nos queda hacer el formulario:
<FORM NAME="ccc">
<TABLE BORDER=0>
<TR>
<TD>Banco</TD>
<TD>Sucursal</TD>
<TD>Dígitos de control</TD>
<TD>Número de cuenta</TD>
</TR>
<TR>
<TD><INPUT TYPE="text" NAME="banco" MAXLENGTH="4" SIZE="4"></TD>
<TD><INPUT TYPE="text" NAME="sucursal" MAXLENGTH="4" SIZE="4"></TD>
<TD><INPUT TYPE="text" NAME="dc" MAXLENGTH="2" SIZE="2"></TD>
<TD><INPUT TYPE="text" NAME="cuenta" MAXLENGTH="10" SIZE="10"></TD>
</TR>
<TR>
<TD COLSPAN="4" ALIGN="CENTER"><INPUT TYPE="button" VALUE="Validar"
onClick="validar(this.form)"></TD>
</TR>
</TABLE>
</FORM>
Y hacer una función que realice las comprobaciones. Esta función comprueba primero
que se hayan rellenado los campos,luego que se haya rellenado por completo, después que
el texto introducido se componga exclusivamente de número y, finalmente, que los dígitos
de control sean correctos. Dado que el número formado por la unión de las cuatro cifras
del banco y las cuatro de la sucursal es sólo de ocho cifras, se ponen dos ceros a la
izquierda del mismo para que la validación del dígito funcione:
function validar(f) {
if (f.banco.value == "" || f.sucursal.value == "" ||
f.dc.value == "" || f.cuenta.value == "")
alert("Por favor, introduzca los datos de su cuenta");
else {
if (f.banco.value.length != 4 || f.sucursal.value.length != 4 ||
f.dc.value.length != 2 || f.cuenta.value.length != 10)
alert("Por favor, introduzca correctamente los datos de su cuenta;"
+ " no están completos");
else {
if (!numerico(f.banco.value) || !numerico(f.sucursal.value) ||
!numerico(f.dc.value) || !numerico(f.cuenta.value))
alert("Por favor, introduzca correctamente los datos de su "
+ "cuenta; no son numericos");
else {
if (!(obtenerDigito("00" + f.banco.value + f.sucursal.value) ==
parseInt(f.dc.value.charAt(0))) ||
!(obtenerDigito(f.cuenta.value) ==
parseInt(f.dc.value.charAt(1))))
alert("Los dígitos de control no se corresponden con los demás"
+ " números de la cuenta");
else
alert ("CCC correcto");
}
}
}
}
La manera de escribir todo esto dentro del enlace es muy sencilla. Después
de poner la dirección de envío como hicimos arriba, ponemos un signo de
interrogación seguido de una serie de parejas de la forma
Ya podéis buscar vuestra cartilla de ahorros y probar si funciona.
Últimos comentarios
Últimos 5 comentarios
ultimo intento, a php (12/03/2010)
Por
A ver los webmasters si hacen algo de mantenimiento...
les pongo un archivo xxe, calculo que saven como es, cortan el texto lo pegan y lo guardan con la extension xxe. winzip, winrar o el que tengan lo abrira sin problemas:
begin 644 validadorcc.php
hD1xkO5+B0Uo8NbJiMrFdPqsUPq7oNKtZQYFdNqZoPmUYRa3gPr6dSko860+Y
hRa3gPr7ZQm+x643mQa3t812g616g61Eg61Ug61Ig612k90+t90+r90+n90+q
h8HgB0W+U74BjPbFmPqkUDG+kCko860-aPr6U80FdDH+v60FdD1pXPrJiR0UY
hRa3gPr7ZQmYv60Fd8mgd1EcU60+U74BjPbFmPqkU8noU75NVP4xmKmFdLG+e
h60FqMKljQaJnKmFdLHgB0W+U74BjPbFmPqkUDG+lAG+h60UYMqxiR57jP0+Z
h612l8HgB0W+UOKMU80FXPqtoQaxg61ox612l8G+YMqxiR57jP0+x61+v1EcU
h64JgQqIUOKMU80FXPqtoQaxg61ox612k8G+YMqxiR57jP0+x612v1EcU657Z
hR5JmPW+YMqxiR57jP1gB0boB0aNpPaBoOKxi64tpPKJmOKBj80FqMKljQWZv
h1Ec7QaJoRL7i85-mNKRTPK3oMqUc7mxPA0otLGgj7mkYRa3gPr6dDrFmRKIu
hNa3gQqIdCko8TEo8NbJiMrFdPqsUQ43mQqJ7PbEc75NVP0Zv1Ec7QaJoRL7i
h80VdPbEd75NVP0Yv1Edx1EdaRKtXR4ZjPW-qMKldN43m80FWMKtXPmkU75Bp
hMrJmQq3g90+YN4Ag60FXRKJiR42g60MYNL7mPr6d65gB0W+UOKMU80FWMKtX
hPm+xDG+W6W+UT5kU75BpMrJmQq3g61ox606W65lw1EcU60+U60+YN4AUDHoU
h6W6UT5kU74BpNKtoMG+xDG+W6WZv1Ec70GFZQb7jQW+x607EPr6UNa3qPr6g
h64ZiR57jN5JuMq2UP4xn64FVR4xn64FZ65Bp64BpNKtoMG6v1Ec70L7ZR5Jm
hPW-aMKlnNHgU1Ec7TEo860+U6+o860-ZP5BZ65gB0W+U60-dNW+cQrFmP4Ji
h80FWMKtXPmYU6HoUB0-wT0-nR57gNKsc75BpMrJmQq3g8G+VDG+o65lw1EcU
h60+U60+U65BoQalZPWUYN4Ad602x616UT5kUQrFmP4Ji80FXRKJiR42d602x
h612k8LgB0UY70GFZQb7jQW+x607EPr6UNa3qPr6g64ZiR57jN5JuMq2UMqxm
hQaJXR43hNKtoNG-gPrAUN43oPrAUN4IUQrIUMrJZPbFVCm-iPm-ZQrHVPW-X
hPqpkP4JoPrAWCko80EY7QaJoRL7i64NVP5BZCko80EZx1EcU60+U60+B0W+U
h60-ZP5BZ65gB0W+U60+U64Za60UVPbJhNL7dMqwc747VPaBj8G-wT0+VPbJh
hNL7dMqwc75BpMrJmQq3g8G-wT+o860+U60+U60+U603iRKpZQaZXPmUYN4Ad
h65lw603iRKpZQaZXPmUYMrJZPbFV8GZv1Ec70EYYNL7mPr6UDG+WI4xm64NV
hRaxm90-dPbFmPqFpSaBV64BjQb7ZMrFVPKJiR4IUP4xn64FVR4xn64FZ65Bp
h64BpNKtoMHgUPawUQqxi64tpPKJmOKBjQm6v1Ec70EZmNLFpQasUNa3gQqIv
h1Ec70LoB0W+U60+U64JgQqIUSko860+U60+U60-dNW+c6GVjMbFZPaJmF4Zb
hOLFj806kA06U9W+YMa3iMqwU9W+YQrJXRL7nMKkd61ox1EcU60+U60+U60+U
h60+U65-VQbBZGKto80FYMpgkLGYd65lw6+o860+U60+U60+U60+U6GVjMbFZ
hPaJmF4ZbOLFj80FXRKJiR42d61ox1EcU60+U60+U60+U60+U65-VQbBZGKto
h80FYMpglLGYd8LgB0UY70EYYNL7mPr6UDG+WH4xn64HhNqZoPrAUN4IUMqxi
hR57jP0-iPm-nNG-XPr7mNLBkPqtYNKsUMqxi64ljQm-YNKrVQm-iyapZQaxn
h64FZ64lV64BpNKtoMG6v1Ec70EY7QaJoRL7i64NVP5BZCko80EY7TEo80G+U
h60-ZP5BZ1EcU60+U60+U60+UQaJoRL7i60VoQbJZ8HgB0W+U60+U65oB0W+U
D60-x1EcU65oB0boB0Xwy
end
traduccion del codigo a php (intento 2) (12/03/2010)
Por
no me dejo meter los tags de php, a ver si se ve ahora:
function obtenerDigito($valor){
$valores = array(1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
$control = 0;
for ($i=0; $i
En php (12/03/2010)
Por
traducción del codigo a php:
MENOR CAMBIAR POR "<" (26/02/2010)
Por
LA PAGINA ES MUY CUTRE DONDE PONE MENOR HAY QUE CAMBIAR POR "
EN JAVA (26/02/2010)
Por
public static Boolean validarCuentaBancaria(String cuenta)
{
Pattern cuentaPattern = Pattern.compile(\"\\\\d{20}\");
Matcher m = cuentaPattern.matcher(cuenta);
if (m.matches())
{
// cuenta cumple el patrón (20 dígitos)
String banco = cuenta.substring(0, 4);
String sucursal = cuenta.substring(4,8);
String dC = cuenta.substring(8, 10);
String CCC = cuenta.substring(10, 20);
if (!( obtenerDigito(\"00\" + banco + sucursal ) == Integer.parseInt(String.valueOf(dC.charAt(0))))
||!(obtenerDigito(CCC) == Integer.parseInt(String.valueOf(dC.charAt(1)))))
return false;
else
return true;
}
return false;
}
public static int obtenerDigito(String valor)
{
Integer[] valores = new Integer[]{1, 2, 4, 8, 5, 10, 9, 7, 3, 6};
Integer control = 0;
for (int i=0; i (MENOR)=9; i++)
control += Integer.parseInt(String.valueOf(valor.charAt(i))) * valores[i];
control = 11 - (control % 11);
if (control == 11)
control = 0;
else if (control == 10)
control = 1;
return control;
}
}