Función en PHP para calcular si un DNI o un NIE son válidos

He aquí un clásico por el que todos habremos tenido que pasar alguna vez. Acabo de rescatarlo del armario del olvido y lo he modificado para que compruebe también si es un NIE válido (documento de identidad para extranjeros). Espero que a alguien le sirva de ayuda:

function comprobar_documento_identificacion($dni) {
	if(strlen($dni)<9) {
		return "DNI demasiado corto.";
	}
 
	$dni = strtoupper($dni);
 
	$letra = substr($dni, -1, 1);
	$numero = substr($dni, 0, 8);
 
	// Si es un NIE hay que cambiar la primera letra por 0, 1 ó 2 dependiendo de si es X, Y o Z.
	$numero = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $numero);	
 
	$modulo = $numero % 23;
	$letras_validas = "TRWAGMYFPDXBNJZSQVHLCKE";
	$letra_correcta = substr($letras_validas, $modulo, 1);
 
	if($letra_correcta!=$letra) {
		return "Letra incorrecta, la letra deber&iacute;a ser la $letra_correcta.";
	}
	else {
		return "OK";
	}
}

3 thoughts on “Función en PHP para calcular si un DNI o un NIE son válidos

  1. public function checkdni($dni){
    return (substr(“TRWAGMYFPDXBNJZSQVHLCKE”, substr($dni, 0, -1)%23, 1) == strtoupper(substr($dni, -1)) )? true: false;
    }

Deja un comentario