bueno...al que le pueda interesar, ya he conseguido que funcione correctamente la validación del nif y la validación del cif. el problema reside ahora en hacer que funcionen a la vez, es decir, con un único campo CIF/NIF. Os agradecería eternamente si alguien pudiera echarme una mano. Por cierto, comentarios para hacerme ver lo poco que sé sobran... para hundirme moralmente no me hace falta nadie. ya estoy yo. lo dicho, si alguien puede ayudarme, os lo agradecería:
código para validar NIF:
Código PHP:
//si se ha pulsado el botón enviar
if(isset($_POST['submit']))
{
// Creamos nombres de variables cortos
$nombre= trim( $_POST['nombre'] );
$cifrest= trim( $_POST['cifrest'] );
/////////////////////////////DATOS BASICOS PARA VALIDAR EL CIF/NIF
//preparación de los datos para comprobar el cif/nif
$cifrest= strtoupper($cifrest);
for ($i = 0; $i < 9; $i ++)
$num[$i] = substr($cifrest, $i, 1);
//algoritmo para comprobacion de codigos tipo CIF
$suma = $num[2] + $num[4] + $num[6];
for ($i = 1; $i < 8; $i += 2)
$suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]),1,1);
$n = 10 - substr($suma, strlen($suma) - 1, 1);
/////////////////////////////FINAL DATOS BASICOS PARA VALIDAR EL CIF/NIF
// validamos que se hayan enviado los campos
if (!empty($nombre)
&& !empty($cifrest)
&& ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest)
&& ereg('(^[0-9]{8}[A-Z]{1}$)', $cifrest)
&& $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cifrest, 0, 8) % 23, 1)
)
//si todos los campos están bien cumplimentados hacemos el ingreso enla base de datos
mysql_query("INSERT INTO alumnos(nombre, cifrest ) VALUES ('$nombre','$cifrest ')");
}
else
{
echo "<br><div style=\"background-color: #FFFFFF; border: #FFA500 1px solid; padding: 6px;\"><span class=\"text1\">Se han detectado los siguientes errores. Por favor, corríjalos y reenvíe la información</span><br><br>";
if(empty($nombre)) {
echo "<span class=\"text14\">El campo Nombre es obligatorio</span></br>";
$nombre= $nombre."\" style=\"background-color: #FFE4E1\"";
}
//APARTADO ESPECIAL VALIDACION CIF/NIF
//VALIDACION NIF
//si está vacío el campo devuelve error
if(empty($cifrest)) {
echo "<span class=\"text14\">El campo NIF es obligatorio</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//si no tiene un formato valido devuelve error
elseif (!empty($cifrest) && !ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest)) {
echo "<span class=\"text14\">Introduzca un NIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//comprobacion de NIFs estandar: Comprobamos que tenga 9 digitos
elseif (!empty($cifrest) && ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest) && !ereg('(^[0-9]{8}[A-Z]{1}$)', $cifrest)) {
echo "<span class=\"text14\">Introduzca un NIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//comprobacion de NIFs estandar: Comprobamos que sea la letra sea la de NIF válido
elseif (!empty($cifrest) && ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest) && ereg('(^[0-9]{8}[A-Z]{1}$)', $cifrest) && $num[8] != substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cifrest, 0, 8) % 23, 1)) {
echo "<span class=\"text14\">Introduzca un NIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//FINAL APARTADO ESPECIAL VALIDACION NIF
//FINAL APARTADO ESPECIAL VALIDACION CIF/NIF
echo "</div><br><br>";
}
//y este es el formulario
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
echo "Nombre<br><input type=\"text\" name=\"nombre\" class=\"caja\" size=\"50\" value=\"$nombre\"></br>";
echo "NIF<br><input type=\"text\" name=\"cifrest\" class=\"caja\" size=\"50\" value=\"$cifrest\"></br>";
echo "<br><input type=\"submit\" name=\"submit\" class=\"caja\" value=\"Enviar\">";
Bien. con el código de arriba se valida correctamente los NIF.
Vamos ahora con el código en el supuesto de que en lugar de ser un NIF fuera un CIF:
código para validar CIF:
Código PHP:
//si se ha pulsado el botón enviar
if(isset($_POST['submit']))
{
// Creamos nombres de variables cortos
$nombre= trim( $_POST['nombre'] );
$cifrest= trim( $_POST['cifrest'] );
/////////////////////////////DATOS BASICOS PARA VALIDAR EL CIF/NIF
//preparación de los datos para comprobar el cif/nif
$cifrest= strtoupper($cifrest);
for ($i = 0; $i < 9; $i ++)
$num[$i] = substr($cifrest, $i, 1);
//algoritmo para comprobacion de codigos tipo CIF
$suma = $num[2] + $num[4] + $num[6];
for ($i = 1; $i < 8; $i += 2)
$suma += substr((2 * $num[$i]),0,1) + substr((2 * $num[$i]),1,1);
$n = 10 - substr($suma, strlen($suma) - 1, 1);
/////////////////////////////FINAL DATOS BASICOS PARA VALIDAR EL CIF/NIF
// validamos que se hayan enviado los campos
if (!empty($nombre)
&& !empty($cifrest)
&& ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest)
&& ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cifrest)
&& $num[8] == chr(64 + $n)
||
!empty($nombre)
&& !empty($cifrest)
&& ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest)
&& ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cifrest)
&& $num[8] == substr($n, strlen($n) - 1, 1)
)
//si todos los campos están bien cumplimentados hacemos el ingreso enla base de datos
mysql_query("INSERT INTO alumnos(nombre, cifrest ) VALUES ('$nombre','$cifrest ')");
}
else
{
echo "<br><div style=\"background-color: #FFFFFF; border: #FFA500 1px solid; padding: 6px;\"><span class=\"text1\">Se han detectado los siguientes errores. Por favor, corríjalos y reenvíe la información</span><br><br>";
if(empty($nombre)) {
echo "<span class=\"text14\">El campo Nombre es obligatorio</span></br>";
$nombre= $nombre."\" style=\"background-color: #FFE4E1\"";
}
//APARTADO ESPECIAL VALIDACION CIF/NIF
//VALIDACION NIF
//si está vacío el campo devuelve error
if(empty($cifrest)) {
echo "<span class=\"text14\">El campo CIF es obligatorio</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//si no tiene un formato valido devuelve error
elseif (!empty($cifrest) && !ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest)) {
echo "<span class=\"text14\">Introduzca un CIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//comprobacion de NIFs estandar: Comprobamos que tenga 9 digitos
elseif (!empty($cifrest) && !ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest) && !ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cifrest)) {
echo "<span class=\"text14\">Introduzca un CIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//comprobacion de NIFs estandar: Comprobamos que sea la letra sea la de NIF válido
elseif (!empty($cifrest) && !ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cifrest) && ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cifrest) && $num[8] != chr(64 + $n) || $num[8] != substr($n, strlen($n) - 1, 1)) {
echo "<span class=\"text14\">Introduzca un CIF válido</span></br>";
$cifrest = $cifrest."\" style=\"background-color: #FFE4E1\"";
}
//FINAL APARTADO ESPECIAL VALIDACION NIF
//FINAL APARTADO ESPECIAL VALIDACION CIF/NIF
echo "</div><br><br>";
}
//y este es el formulario
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">";
echo "Nombre<br><input type=\"text\" name=\"nombre\" class=\"caja\" size=\"50\" value=\"$nombre\"></br>";
echo "CIF<br><input type=\"text\" name=\"cifrest\" class=\"caja\" size=\"50\" value=\"$cifrest\"></br>";
echo "<br><input type=\"submit\" name=\"submit\" class=\"caja\" value=\"Enviar\">";
Bien. podéis comprobar como esos dos formularios validan correctamente el NIF y el CIF. Es decir, si yo en un sólo formulario meto dos campos diferentes, uno CIF y otro NIF y valido con esas expresiones, todo correcto. Pero lo que yo quiero es un único formulario y un único campo para el CIF/NIF de tal modo que si yo meto un NIF lo valide y si yo meto un CIF lo valide. lo tengo conseguido por separado pero no soy capaz de mezclarlo todo para que lo valide a través de un único campo. estoy saturada.
Por favor, se agradecen colaboraciones constructivas....gracias
![Corazón](http://static.forosdelweb.com/fdwtheme/images/smilies/love.png)
![Corazón](http://static.forosdelweb.com/fdwtheme/images/smilies/love.png)
:corazon :