Comprobar DNI / NIF con PHP

Esta función es capaz de comprobar si el NIF tiene un formato correcto o no, es decir, si la letra indicada es la que corresponde a la cadena de 8 números. Que devuelva un resultado positivo no quiere decir que sea un número que exista, sólo que el formato es correcto.

function comprobar_nif($nif){
   $letras = explode(',','T,R,W,A,G,M,Y,F,P,D,X,B,N,J,Z,S,Q,V,H,L,C,K,E');
   if (
      (strlen($nif)!=9) ||
      (!is_long($entero=intval(substr($nif,0,8)))) ||
      (!in_array($letra=strtoupper(substr($nif,8,1)),$letras)) ||
      ($letra!=$letras[$entero%23])
      ){
         return false;
      }else{
         return true;
      }
}

Si le indicamos 00000000T devolverá true, aunque no creo que exista (este es el número que uso para hacer pruebas). Y creo que el uso es bastante sencillo, sería algo como esto

if(comprobar_nif('00000000T')){
   echo 'Correcto';
}else{
   echo 'Incorrecto';
}

Comentarios (3)

Muchas gracias, me ha sido muy útil. Sólo una pequeña sugerencia de mejora: creo que esta función no funcionaría bien para DNIs extranjeros. Son DNIs con formato X-nnnnnnn-L
es decir, tiene una X delante y en lugar de 8 números tiene 7.
Por ejemplo, el DNI X0000000T debería ser también correcto.
Eso también pasa, con otra letra, para DNIs de menores, y otras causas.
Puedes ver la información completa sobre el formato del DNI aquí: http://es.wikipedia.org/wiki/N%C3%BAmero_de_identificaci%C3%B3n_fiscal

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.