Os paso una función para validar DNI CIF NIE
/** * Validar DNI (NIF), CIF, NIE * * @param string $dni Numero de identificación * * @return bool Si es ok(true) o no(false) */ function validDniCifNie($dni){ $cif = strtoupper($dni); for ($i = 0; $i < 9; $i ++){ $num[$i] = substr($cif, $i, 1); } // Si no tiene un formato valido devuelve error if (!preg_match('/((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)/', $cif)){ return false; } // Comprobacion de NIFs estandar if (preg_match('/(^[0-9]{8}[A-Z]{1}$)/', $cif)){ if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 0, 8) % 23, 1)){ return true; }else{ return false; } } // Algoritmo para comprobacion de codigos tipo CIF $suma = $num[2] + $num[4] + $num[6]; for ($i = 1; $i < 8; $i += 2){ $suma += (int)substr((2 * $num[$i]),0,1) + (int)substr((2 * $num[$i]), 1, 1); } $n = 10 - substr($suma, strlen($suma) - 1, 1); // Comprobacion de NIFs especiales (se calculan como CIFs o como NIFs) if (preg_match('/^[KLM]{1}/', $cif)){ if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 1, 8) % 23, 1)){ return true; }else{ return false; } } // Comprobacion de CIFs if (preg_match('/^[ABCDEFGHJNPQRSUVW]{1}/', $cif)){ if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1)){ return true; }else{ return false; } } // Comprobacion de NIEs // T if (preg_match('/^[T]{1}/', $cif)){ if ($num[8] == preg_match('/^[T]{1}[A-Z0-9]{8}$/', $cif)){ return true; }else{ return false; } } // XYZ if (preg_match('/^[XYZ]{1}/', $cif)){ if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr(str_replace(array('X','Y','Z'), array('0','1','2'), $cif), 0, 8) % 23, 1)){ return true; }else{ return false; } } // Si todavía no se ha verificado devuelve error return false; }
Lo has probado el script? Te invito a que lo compruebes con un NIE, por ejemplo:
Y8506795Y
Ya que lo has copiado de otra web, sería lo suyo que al menos comprobaras su funcionamiento completo.
Si lo quieres, te paso la correción.
Hola Juan,
Si he probado el script cuando me hacia falta y no me dio errores, acabo de probar con el que has pasado y da conforme es valido.
Revisando en otras webs de validadores indica lo mismo que dicho NIE es valido.
Cuando lo publique no mencione de donde es el código porque no recuerdo ya que hace mucho tiempo que lo tengo como puedes comprobar dicha publicación es del 2020 y hace mas tiempo que lo uso.
Si puedes pásame la corrección y reviso.
Muchas gracias por leer la pagina web, que tengas un buen día.
Saludos
No funciona con CIFs de empresas que no residen en España. La mayoría de los algoritmos no tienen en cuenta. Es una pena. Las únicas webs que funcionan, no tiene código, solo comprobación online.
Hola, para eso necesitarías tener una función por PAIS (ya que cada uno tiene sus validaciones), para poder validar teniendo en cuenta las 2 letras iniciales ej.: ESB12345678 o ADF-099999-G (Andorra), también existen paginas donde te dan una API y puedes hacer validaciones lo unico que son de pago.