Ver Mensaje Individual
  #14 (permalink)  
Antiguo 03/01/2010, 12:37
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
Respuesta: algo curioso con las expresiones regulares

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 
   
$nombretrim$_POST['nombre'] );
   
$cifresttrim$_POST['cifrest'] );  

/////////////////////////////DATOS BASICOS PARA VALIDAR EL CIF/NIF   
//preparación de los datos para comprobar el cif/nif
    
$cifreststrtoupper($cifrest);
        for (
$i 0$i 9$i ++)
            
$num[$i] = substr($cifrest$i1);    
//algoritmo para comprobacion de codigos tipo CIF
        
$suma $num[2] + $num[4] + $num[6];
        for (
$i 1$i 8$i += 2)
            
$suma += substr(($num[$i]),0,1) + substr(($num[$i]),1,1);
        
$n 10 substr($sumastrlen($suma) - 11);    
/////////////////////////////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($cifrest08) % 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($cifrest08) % 231))    {
         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 
   
$nombretrim$_POST['nombre'] );
   
$cifresttrim$_POST['cifrest'] );  

/////////////////////////////DATOS BASICOS PARA VALIDAR EL CIF/NIF   
//preparación de los datos para comprobar el cif/nif
    
$cifreststrtoupper($cifrest);
        for (
$i 0$i 9$i ++)
            
$num[$i] = substr($cifrest$i1);    
//algoritmo para comprobacion de codigos tipo CIF
        
$suma $num[2] + $num[4] + $num[6];
        for (
$i 1$i 8$i += 2)
            
$suma += substr(($num[$i]),0,1) + substr(($num[$i]),1,1);
        
$n 10 substr($sumastrlen($suma) - 11);    
/////////////////////////////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($nstrlen($n) - 11)
   )

//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($nstrlen($n) - 11))    {
         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:corazon :
__________________
desgraciadamente no conozco php ni la mitad de lo que lo conocen ustedes y eso es menos de la mitad de lo que yo querria y lo que yo querria es menos de la mitad de lo que la mitad de ustedes conocen

Última edición por estibaliz2006; 03/01/2010 a las 12:45