- 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 :
bool/string dni ( string $dni [, string $separador, int $modo ] )
Previa declaracion de la funcion, se podria usar así :
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:
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: