Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/07/2006, 09:18
Avatar de Azrael666
Azrael666
 
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Código PHP:
//
// Verifica que el NIF o CIF entregado es válido
//    (C)2004 Juan Prada www.silueth.com
//
//    string    $as_dato        NIF o CIF a verificar
//
//    Retorno    1    Era un NIF, y es correcto
//                2    Era un CIF, y es correcto
//                -1    Era un NIF, y es incorrecto
//                -2 Era un CIF, y es incorrecto
//                0    No se puede determinar si es NIF o CIF, y es incorrecto

function f_nifcif_verifica($as_dato) {
    
$li_ret 0;

    
// Elimina caracteres no válidos
    
$as_dato ereg_replace("[^[:alnum:]]\", \"\", $as_dato);

    // Averigua si es NIF o CIF (Si lleva la letra al principio, es CIF)
    $lb_esCIF=(!is_numeric(substr($as_dato, 0, 1)));
    $lb_esNIF=(!is_numeric(substr($as_dato, strlen($as_dato)-1, 1)));

    if ($lb_esCIF || $lb_esNIF) {
        // Separa los números y las letras
        $ls_numero = ereg_replace(\"[[:alpha:]]\", \"\", $as_dato);
        $ls_letra = ereg_replace(\"[^[:alpha:]]\", \"\", $as_dato);

        //echo \"as_dato=$as_dato; ls_numero=$ls_numero; ls_letra=$ls_letra; lb_esNIF=\".f_bool($lb_esNIF).\"; lb_esCIF=\".f_bool($lb_esCIF).\'<br>\';

        if ($lb_esNIF) {
            // Verifica que sea NIF
            (f_LetraNIF($ls_numero) == $ls_letra)?$li_ret=1:$li_ret=-1;
        };

        if ($lb_esCIF) {
            // Verifica que sea CIF
            f_ValidarCIF($ls_numero)?$li_ret=2:$li_ret=-2;
        };
    }

    return $li_ret;
}



//
//    Calcula la letra de un NIF
//    (C)2004 Juan Prada www.silueth.com
//
//    string    $dni        Números que conforman el DNI o CIF (SIN LETRA)
//
//    Retorno    string    La letra correspondiente
//
function f_LetraNIF ($dni) {
    $valor= (int) ($dni / 23);
    $valor *= 23;
    $valor= $dni - $valor;
    $letras= \"TRWAGMYFPDXBNJZSQVHLCKEO\";
    $letraNif= substr ($letras, $valor, 1);
    return $letraNif;
}



//
//    Valida el número CIF
//    (C)2004 Juan Prada www.silueth.com
//
//    string    $ccNumber (El CIF (Sin letra) a verificar)
//
//    Retorno    boolean    true    Es correcto
//                            false    No vale
//
function f_ValidarCIF($ccNumber) {
    $lb_ret=false;
    if (strlen($ccNumber) == 8) {
        $lb_ret=true;

        $numOfDigits = 0 - strlen($ccNumber);

        $i = -1;
        while ($i>=$numOfDigits){
          if (($i % 2) == 0){
           $double = 2*(substr($ccNumber, $i, 1));
           $total += substr($double,0,1);
           if (strlen($double > 1)){
             $total += substr($double,1,1);
           }
          } else {
           $total += substr($ccNumber, $i, 1);
          }
          $i--;
        }

        if (($total % 10) != 0){
          $lb_ret=false;
        }
    }
    return $lb_ret;

todo eso buscando en el google "validar dni php" y entrando en la primera pagina que me sale
http://www.programacion.com/php/codigo/106/
__________________
ALOZORRO v5.0 (ahora en .es)