PHP – Validar un NIF
Hay muchas versiones y opciones por internet para validar un NIF en PHP. Os proponemos una muy interesante y completa.
Ya vimos en anteriores artículos cómo validar un NIE en PHP y cómo validar un CIF en PHP. Ahora nos toca ver otro formato de documento identificador como es el NIF, uno de los más demandados en formularios de webs.
Aquí está el código:
function validateNif($nif) {
$nif_codes = 'TRWAGMYFPDXBNJZSQVHLCKE';
$sum = (string) $this->getCifSum ($nif);
$n = 10 - substr($sum, -1);
if (preg_match ('/^[0-9]{8}[A-Z]{1}$/', $nif)) {
// DNIs
$num = substr($nif, 0, 8);
return ($nif[8] == $nif_codes[$num % 23]);
} elseif (preg_match ('/^[XYZ][0-9]{7}[A-Z]{1}$/', $nif)) {
// NIEs normales
$tmp = substr ($nif, 1, 7);
$tmp = strtr(substr ($nif, 0, 1), 'XYZ', '012') . $tmp;
return ($nif[8] == $nif_codes[$tmp % 23]);
} elseif (preg_match ('/^[KLM]{1}/', $nif)) {
// NIFs especiales
return ($nif[8] == chr($n + 64));
} elseif (preg_match ('/^[T]{1}[A-Z0-9]{8}$/', $nif)) {
// NIE extraño
return true;
}
return false;
}
Esta función devolverá si el parámetro que se le facilita es o no un NIF. Mira las cuatro reglas posibles para que se cumpla que sea NIF lo que se le pasa como parámetro.
La primera regla mira si es un DNI. La segunda si es un NIE normal. La tercera si es es un NIF especial. La última recla si es un NIE no habitual.
En resumen, mira los 4 formatos mas comunes para los NIF. Si es un de ellos, devuelve true. En caso contrario, devuelve false.
Pondremos atención en una de las funciones más utilizada en este tipo de código de validaciones es preg_match. Esta función de PHP facilita comprobar si una string cumple con un formato regular. Mediante un «lenguaje» específico, le pasamos a la función que formato debe tener la string, y la función te devuelve si la string la cumple. Estas reglas que le pasamos a la función, no son sencillas de formar y reciben el nombre de expresiones regulares. Por Internet multitud de listas de estas reglas que podéis utilizar. Para más información, podéis visitar la documentación de preg_match en php.
Aquí tenéis un enlace muy interesante con 8 de las expresiones regulares más comunes que normalmente debemos validar.
Espero que os sea de utilidad el código para validar un NIF en PHP.
Más información en:
https://bulma.net/funcion-para-validar-el-nif-cif-y-nie-en-php/
https://github.com/amnesty/drupal-nif-nie-cif-validator/blob/master/includes/nif-nie-cif.php
De todas las funciones que he visto para este propósito , esta ha sido la que más me ha gustado , así que he ido a probarla y me he dado cuenta de que haces uso de una función que no muestras getCifSum().
Te pido que subas ese trozo de código.
Un saludo y gracias !
Este es el código que tendría dentro la función
private function getCifSum(string $nif): int
{
$sum = (int)$nif[2] + (int)$nif[4] + (int)$nif[6];
for ($i = 1; $i < 8; $i += 2) {
$sum += (int) substr((2 * (int)$nif[$i]), 0, 1) + (int) substr((2 * (int)$nif[$i]), 1, 1);
}
return $sum;
}