Hola otra vez.
Estoy de acuerdo que éste foro es un medio de información de ayuda, pero al parecer no se está llegando a ningun lugar.
Es entonces que es mi deber como programador y emprendedor es el de aportar un granito de arena, ya que recuerdo a todos que comenzar es sumamente complicado para unos, pero una vez que se llega a un cierto nivel en base a práctica, el aprendiz ocupará el lugar del maestro y así seguira el ciclo evolutivo, y sin enrrollarme más con esto voy con lo mio:
Aplicando la teoria de
pateketrueke lo que te faltaría es crear dos funciones por separado: valida_cif(dato) y valida_nif(dato) respectivamente y que cada funcion devuelva en valor lógico TRUE y FALSE.
Suponiendo que tu código esté bien diseñado, tu función valida_cif(dato) será el siguiente:
Código PHP:
<?php
funcion valida_cif($cifrest)
{
//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($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))
//VALIDACION NIF
//si está vacío el campo devuelve error
if(empty($cifrest)) {
return false;
}
//si no tiene un formato valido devuelve error
else if (!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)) {
return false;
}
//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)) {
return false;
}
//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)) {
return false;
}
return true;
}
function valida_nif($cifrest)
{
...
}
?>
Un vez que tienes las dos funciones sólo tienes que aplicar la lógica que nos dá
pateketrueke, es decir:
Código PHP:
if ( ! empty($_POST['cifrest']))
{
$cifrest= $_POST['cifrest'];
if ( valida_cif($cifrest) && valida_nif($cifrest)) // si CIF y NIF son vàlidos
{...}
else if (valida_cif($cifrest) && !valida_nif($cifrest)) // si solo el CIF es vàlido
{...}
else if (!valida_cif($cifrest) && valida_nif($cifrest)) // si solo el NIF es vàlido
{...}
else // si ninguno son validos
{...}
}
En cada caso se deberia mostrar el mensaje correspondiente.
Y con esto le das mas claridad a tu código segmentandolo en funciones, espero te sirva esto y suerte!!!