|
|
funcion para Validar el NIF, CIF y NIE en php
(42385 lectures)
Por david vidal
usu
()
Creado el 12/11/2005 05:39 modificado el 16/02/2010 00:49
|
Es una función para validar todos los códigos fiscales que se usan en España. Analiza y verifica el tipo de código y entrega un valor indicativo. | Pagina1/1 |
Función para validar códigos NIF, CIF y NIE en PHP
Esta función clasifica y valida perfectamente todos* los códigos fiscales
que se usan en España. Analiza una variable de 9 carácteres alfanuméricos y devuelve
un valor numérico para cada tipo de código analizado donde todos los valores positivos
(mayores que cero) indican que el código fiscal es correcto.
Los valores devueltos son:
| Tipo: |
??? |
NIF |
CIF |
NIE |
| Correcto: |
|
1 |
2 |
3 |
| Incorrecto: |
0 |
-1 |
-2 |
-3 |
La función cumple con todas las especificaciones de las leyes españolas:
Decreto 2423/1975, de 25 de septiembre.
Real Decreto 338/1990, de 9 de marzo.
Real Decreto 1624/1992, de 29 de diciembre que modifica el 338/1990.
Real Decreto 155/1996, de 2 de febrero.
Orden de 3 de julio de 1998, por la que se modifica el Anexo del Decreto 2423/1975.
Real Decreto 1065/2007, de 27 de julio.
Orden EHA/451/2008, de 20 de febrero de 2008.
Orden INT/2058/2008, de 14 de julio de 2008.
Que es, actualmente, todo lo aprobado respecto con los Códigos de
Identificación Fiscal, Número de Identificación Fiscal y Número de
Identificación de Extranjeros.
He aquí la función:
function valida_nif_cif_nie($cif) {
//Copyright ©2005-2008 David Vidal Serra. Bajo licencia GNU GPL.
//Este software viene SIN NINGUN TIPO DE GARANTIA; para saber mas detalles
//puede consultar la licencia en http://www.gnu.org/licenses/gpl.txt
//Esto es software libre, y puede ser usado y redistribuirdo de acuerdo
//con la condicion de que el autor jamas sera responsable de su uso.
//Returns: 1 = NIF ok, 2 = CIF ok, 3 = NIE ok, -1 = NIF bad, -2 = CIF bad, -3 = NIE bad, 0 = ??? bad
$cif = strtoupper($cif);
for ($i = 0; $i < 9; $i ++)
$num[$i] = substr($cif, $i, 1);
//si no tiene un formato valido devuelve error
if (!ereg('((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)', $cif))
return 0;
//comprobacion de NIFs estandar
if (ereg('(^[0-9]{8}[A-Z]{1}$)', $cif))
if ($num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 0, 8) % 23, 1))
return 1;
else
return -1;
//algoritmo para comprobacion de codigos tipo CIF
$suma = $num[2] + $num[4] + $num[6];
for ($i = 1; $i < 8; $i += 2)
$suma += substr((2 * $num[$i]),0,1) + 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 (ereg('^[KLM]{1}', $cif))
if ($num[8] == chr(64 + $n) || $num[8] == substr('TRWAGMYFPDXBNJZSQVHLCKE', substr($cif, 1, 8) % 23, 1))
return 1;
else
return -1;
//comprobacion de CIFs
if (ereg('^[ABCDEFGHJNPQRSUVW]{1}', $cif))
if ($num[8] == chr(64 + $n) || $num[8] == substr($n, strlen($n) - 1, 1))
return 2;
else
return -2;
//comprobacion de NIEs
//T
if (ereg('^[T]{1}', $cif))
if ($num[8] == ereg('^[T]{1}[A-Z0-9]{8}$', $cif))
return 3;
else
return -3;
//XYZ
if (ereg('^[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 3;
else
return -3;
//si todavia no se ha verificado devuelve error
return 0;
}
Puesto que siempre cabe la posibilidad de que el código fuente contenga
algún error podéis pulsar aquí para mandarme un e-mail para que lo corrija.
Agradecería que la información estuviese mínimamente documentada (por ejemplo
el numero de cualquier nueva ley al respecto, o en caso de que un código
fiscal no sea validado por la función pues que esté verídicamente
contrastado...etc).
Agradecimientos:
- Luis P. Garrán, por el Real Decreto 1624/1992 y la especificación como NIF de los códigos con letras "K", "L" y "M".
- Lluis Rubio, por la nueva codificación de los NIE con letras "Y" y, en un futuro, "Z".
- Jorge C. Hermoso Bernabéu, por las nuevas claves para entidades de la EHA/451/2008.
- Moises Gonzalez Sanchez, por descubrir la doble validación de los códigos con letras "K", "L" y "M".
*Nota: dado que el algoritmo del dígito de control usado es secreto y jamás
ha sido publicado en fuentes oficiales del Estado se ha usado un algoritmo
obtenido por ingeniería inversa que ha logrado validar correctamente alrededor
de un millón de CIFs, NIFs y NIEs en total. Con lo que, presumiblemente, se
puede asumir que concuerda con el algoritmo de validación secreto original. |
|
|
|
|
|
Comentarios Es posible que se hayan omitido algunos comentarios considerados poco constructivos
| 1. Re: funcion para Validar el NIF, CIF y NIE en php (06/09/2008 23:12, #43427) Por: Anónimo |
| Realmente hay un declive en bulma si salen en portada noticias como esta. No le quito el mérito pero no lo veo para una portada de bulma. |
|
2. Re: funcion para Validar el NIF, CIF y NIE en php (08/09/2008 11:42, #43428) Por: Anónimo |
| Yo creo que todo lo que pueda servir a la comunidad tiene derecho a estar en portada. |
|
3. Re: funcion para Validar el NIF, CIF y NIE en php (17/09/2008 01:52, #43432) Por: H (http://h.says.it/) |
En cualquier caso, si exiges que solo artículos de los mejores de Bulma se publiquen, no dejas que se apunten nuevos autores que poco a poco van subiendo de nivel.
Pero claro en el fondo no es ese tu interés. Si supieses lo que pienso de quien se alimenta más de escribir críticas destructivas que de alentar a la gente ...
Publica tú algo que tenga el nivel que exiges. |
|
4. Re: funcion para Validar el NIF, CIF y NIE en php (19/02/2010 18:00, #43761) Por: Anonimo |
| Mírate los primeros comentarios del código. Yo veo ahí una licencia libre. ¿Dónde ves el problema? |
|
|
5. Re: funcion para Validar el NIF, CIF y NIE en php (12/09/2008 10:35, #43430) Por: Edgar |
| Pues a mi me va de perlas, si sólo pudiera conseguir lo mismo con los "DNI" portuguses ya me haría la vida un poco más fácil... |
|
6. Re: funcion para Validar el NIF, CIF y NIE en php (19/09/2008 09:45, #43433) Por: Vanesa |
| Hola, tengo una duda respecto del NIE, es que no encuentro en ningún sitio la confirmación de que hay que substituir para el cálculo la letra inicial X por un 0, la Y por un 1, y la Z por un 2, y así sucesivamente... ¿sabes si realmente esto es así? ¿Me puedes dar alguna fuente de referencia oficial de ésto?
Muchas gracias. |
|
7. Re: funcion para Validar el NIF, CIF y NIE en php (21/09/2008 10:01, #43434) Por: KaOs |
| Pues eso, yo también tengo mucho interés en tener una referencia oficial del asunto. No la encuentro por níngún lado. Quizá Lluis Rubio pudiera arrojarnos alguna luz.
Gracias. |
|
8. Re: funcion para Validar el NIF, CIF y NIE en php (24/09/2008 16:33, #43438) Por: Anónimo |
| Referencia legal no sé, pero que desde luego si empleas una de las muchas aplicaciones para calcular la letra de verificación puedes comprobar que es como dices.
Saludos |
|
9. Re: funcion para Validar el NIF, CIF y NIE en php (06/10/2008 13:23, #43448) Por: Anónimo |
| MINISTERIO DEL INTERIOR 12050 ORDEN INT/2058/2008, de 14 de julio, por la que se modifica la Orden del Ministro del Interior de 7 de febrero de 1997, por la que se
regula la Tarjeta de Extranjero, en lo concerniente al número de Identidad de Extranjero |
|
|
10. Re: funcion para Validar el NIF, CIF y NIE en php (25/09/2008 08:18, #43440) Por: Anónimo |
| Muchas gracias me vino de perlas para ver porque no iba con los nuevos NIE, no hagas caso a los comentarios iniciales, puede que no sea un artículo "de peso" pero sin duda es muy práctico y a algunos nos a servido de mucho!!!
Muchas gracias. |
|
11. Re: funcion para Validar el NIF, CIF y NIE en php (19/11/2008 11:12, #43450) Por: Anónimo |
| Creo que la gente que no ve la gran importancia que tiene este artículo es por que son unos enormes ignorantes de las necesidades actuales en programación profesional.
Felicito al autor del artículo y le doy las gracias por facilitar el trabajo a muchísimos programadores. |
|
12. Re: funcion para Validar el NIF, CIF y NIE en php (17/02/2010 11:10, #43757) Por: Anonimo |
| Muchas gracias, ahora mismo no necesito implementarlo, pero lo he necesitado varias veces, ojalá lo hubiese tenido antes. |
|
|
|
13. Re: funcion para Validar el NIF, CIF y NIE en php (08/04/2010 11:27, #43856) Por: Anonimo |
| Alguien podria hecharme una mano? donde se recojen esas variables? no se hacerlo funcionar... :( |
|
14. Re: funcion para Validar el NIF, CIF y NIE en php (14/04/2010 16:42, #43881) Por: Anonimo |
| eso que hay que creer el form que recoge con la
variable $cif o que? |
|
15. Re: funcion para Validar el NIF, CIF y NIE en php (03/08/2010 12:09, #44135) Por: Anonimo |
| efectivamente, el código está desarrollado en php, se llama al método en la comprobación al enviar un formulario, se le pasa el valor que se envía desde el formulario.
Respecto a este artículo, estoy realizando unas modificaciones para realizar la validación por js, en breve lo adjunto. |
|
|
16. Re: funcion para Validar el NIF, CIF y NIE en php (03/08/2010 12:29, #44136) Por: Anonimo |
function esNIFCIFNIE(cif) {
var cif = $("#nif").val();
cif = cif.toUpperCase();
var num = cif.split("");
//si no tiene un formato valido devuelve error
if (!(/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(cif) || /^[T]{1}[A-Z0-9]{8}$/.test(cif) || /^[0-9]{8}[A-Z]{1}$/.test(cif))){
return false;
}
//comprobacion de NIFs estandar
if (/^[0-9]{8}[A-Z]{1}$/.test(cif)){
if (num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substring(cif.substring(0,8) % 23,cif.substring(0,8) % 23 + 1)){
return true;
}else{
return false;
}
}
//algoritmo para comprobacion de codigos tipo CIF
var suma = parseInt(num[2],10) + parseInt(num[4],10) + parseInt(num[6],10);
for (var i = 1; i |
|
17. Re: funcion para Validar el NIF, CIF y NIE en php (03/08/2010 12:41, #44137) Por: Anonimo |
function esNIFCIFNIE( cif) {
var cif = $("#nif").val();
cif = cif.toUpperCase();
var num =cif.split("");
//si no tiene un formato valido devuelve error
if (!(/^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$/.test(cif) || /^[T]{1}[A-Z0-9]{8}$/.test(cif) || /^[0-9]{8}[A-Z]{1}$/.test(cif))){
return false;
}
//comprobacion de NIFs estandar
if (/^[0-9]{8}[A-Z]{1}$/.test(cif)){
if (num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substring(cif.substring(0,8) % 23,cif.substring(0,8) % 23 + 1)){
return true;
}else{
return false;
}
}
//algoritmo para comprobacion de codigos tipo CIF
var suma = parseInt(num[2],10) + parseInt(num[4],10) + parseInt(num[6],10);
for (var i = 1; i < 8; i += 2){
var numero = parseInt(num[i],10);
suma += parseInt((2 * numero).toString().substring(0,1),10) + parseInt((2 * numero).toString().substring(1,2),10);
}
var n = 10 - parseInt(suma.toString().substring(suma.toString().length - 1, suma.toString().length),10);
//comprobacion de NIFs especiales (se calculan como CIFs o como NIFs)
if (/^[KLM]{1}/.test(cif)){
if (num[8] == String.fromCharCode(64 + n) || num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substring(cif.substring(1, 8) % 23,cif.substring(1, 8) % 23 + 1)){
return true;
}else{
return false;
}
}
//comprobacion de CIFs
if (/^[ABCDEFGHJNPQRSUVW]{1}/.test(cif)){
if (num[8] == String.fromCharCode(64 + n) || num[8] == n.toString().substring(n.toString().length - 1, n.toString().length)){
return true;
}else{
return false;
}
}
//comprobacion de NIEs
//T
if (/^[T]{1}/.test(cif)){
if (num[8] == /^[T]{1}[A-Z0-9]{8}$/.test(cif)){
return true;
}else{
return false;
}
}
//XYZ
if (/^[XYZ]{1}/.test(cif)){
var replaceCif = cif.replace(/[X]/,"0");
replaceCif = replaceCif.replace(/[Y]/, "1") ;
replaceCif = replaceCif.replace(/[Z]/,"2");
if (num[8] == 'TRWAGMYFPDXBNJZSQVHLCKE'.substring(replaceCif.substring(0, 8) % 23,replaceCif.substring(0, 8) % 23 + 1)){
return true;
}else{
return false;
}
}
//si todavia no se ha verificado devuelve error
return false;
}
lo que tiene no leerse la instrucciones para postear jeje |
|
|
|
|
|
|---|
|
|
|
|
Calificacion
    Vots: 16 |
Danos tu opinion:
|
|
|
|
|
|
|
|