Validar DNI con PHP

A menudo nos encontramos con que necesitamos realizar un formulario en el cual se debe introducir y registrar un DNI de un usuario. Este campo del formulario debe ser comprobado o verificado para que los usuarios no puedan introducir cualquier texto.

Hemos realizado un formulario con un único campo que espera que se rellene con un DNI correcto. Al pulsar en botón de «Validar DNI» se procederá a la validación de los datos introducidos.

Lo primero que se comprueba es la longitud de la cadena y debe ser expresamente de 10 carácteres (8 carácteres para los números, el guión y 1 carácter para la letra).

Si la longitud es correcta, pasamos a comprobar que en la posición 8 de la cadena hay un guión.

Si es correcto, lo que hacemos es partir la cadena por un lado los números y por otro la letra de la siguiente forma:

<?php
$partes = explode('-', $nif);
$numeros = $partes[0];
$letra = strtoupper($partes[1]);
if (substr("TRWAGMYFPDXBNJZSQVHLCKE",$numeros%23,1) == $letra)
   echo '<p>El DNI: '.$nif.' es correcto!</p>';
else
   echo '<p>La letra introducida no es corrrecta!</p>';
?>

Si el if se cumple, el dni será correcto, en caso contrario, la letra no se correspondería con los números introducidos.

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(6 votos, promedio: 4 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

11 respuestas a “Validar DNI con PHP”

  1. Jos3 dice:

    Como se valida un DNI español? en una funcion javascript?

  2. tengo un problema con prestashop 1.7 debo activar la opción b2b y como prestashop es francesa les pide a los cliente el SIRET (CIF frances) mediante esta función:
    public static function isSiret($siret)
    {
    if (Tools::strlen($siret) != 14)
    return false;
    $sum = 0;
    for ($i = 0; $i != 14; $i++)
    {
    $tmp = ((($i + 1) % 2) + 1) * intval($siret[$i]);
    if ($tmp >= 10)
    $tmp -= 9;
    $sum += $tmp;
    }
    return ($sum % 10 === 0);
    }
    como puedo adaptarla para que coja un NIF y un CIF español, con la misma variable siret (despues la traduzco como nif/cif y ya esta)
    Gracias y saludos.

  3. Ramon dice:

    Hola
    me interesa mucho este tema,pero por mas que intento integrarlo en authcontroller no consigo hacerlo funcionar,mis conocimientos de programacion son muy limitados

    tengo instalado PS 1.6

    me podrias ayudar Jose

    muchas gracias por tu tiempo

    un saludo

  4. María dice:

    Una pregunta. Habría alguna forma para que no valide el DNI?
    Es que tengo muchos usuarios que le da DNI no válido, y es correcto, paso con DNI como con NIE y CIF.
    Es un problema que me está haciendo perder muchos clientes. ¿Podría inhabilitar su validación? para que guarde el dato que se le introduzca, me da igual si correcto o no.
    Saludos.

  5. Hola,
    Se podrían añadir estas lineas al fichero authcontroller.php de mi tienda prestashop??
    Un saludo y gracias por tu trabajo

  6. Cedric Surface dice:

    I wanted to thank you again for this amazing site you have made here. It can be full of ideas for those who are actually interested in this kind of subject, primarily this very post. You’re really all absolutely sweet along with thoughtful of others as well as reading your blog posts is a good delight if you ask me. And what a generous gift! Tom and I will certainly have fun making use of your recommendations in what we must do next week. Our listing is a distance long and tips will be put to excellent use.

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.

Ver más sobre