[PHP] Calcular letra DNI o comprobar validez

Estado
No está abierto para más respuestas.

Bleed

Diamante
Usuario de Bronce
Mensajes
2,408
Puntuación de reacción
1
Buscando en el baul de los recuerdos encontré esta funcion en PHP que hice hace tiempo (muchos años, casi 10 xD) para calcular la letra que corresponderia a un numero dado de DNI, o para comprobar si un DNI en concreto está bien formado y la letra corresponde al numero. La hice un poco con los escasos conocimientos que tenia en aquellos años, y a dia de hoy no me gusta mucho la estructura que tiene, pero es completamente funcional, asi que aqui os lo dejo por si a alguno le interesa :

PHP:
<?php
function dni ($dni,$separador = '-',$modo = 0) {
  // Creamos un string con las letras disponibles. OJO con el orden...
  $letras = "TRWAGMYFPDXBNJZSQVHLCKE";
  $separador = preg_quote($separador);
   if (!empty($dni) && !empty($separador)) {
       switch ($modo) {
          case 0: // $modo (0) para comprobar el DNI
             //Comprobamos que la forma de $dni sea la correcta...
             if(preg_match("/^([0-9]{7,8})$separador([A-Z^IOU])$/i",$dni,$match)) {
                $numero = $match[1]; //Aqui cogemos el numero...
                $letra = $match[2]; //Y aqui la letra...
                return $letras{$numero%23} == $letra; //Devolvemos true o false segun corresponda
             }else{
                return null; //Si $dni no tiene la forma correcta devolvemos null
             }
          break;
          case 1: // $modo (1) para calcular la letra de un DNI
                return $letras{$dni%23}; //Devolvemos la letra
          break;
          default: // $modo default
             dni($dni,$separador,0); //Por si algun listo mete en $modo un numero >1
          break;
      }
   }
}
?>

bool/string dni ( string $dni [, string $separador, int $modo ] )

Previa declaracion de la funcion, se podria usar así :
PHP:
<?php
echo dni("74696670-F","-",0); // Devolverá true (1), ya que F es la letra que corresponde al numero dado. En este caso $modo (0) es opcional.
echo dni("74696670","-",1); // Devolverá la letra correspondiente al DNI 74696670, es decir, F.
?>

Asi que ahi os dejo este pequeño aporte. Como digo, es uno de los primeros "trabajos" utiles que hice con PHP, lo encontré en un CD y dice que fue creado en 2005, pero aun funciona correctamente. :mola:
 
Estado
No está abierto para más respuestas.
Arriba