BULMA Bulma amb el projecta Defective by Desing
Bergantells Usuaris de GNU/Linux de Mallorca i Afegitons   |   Bisoños Usuarios de GNU/Linux de Mallorca y Alrededores
CONTENIDOS
. Jornadas de software libre
. Version para PDA
. Enlaces breves
. La asociacion
. Los mas leidos
. Autores [Actividad]
. Ultimos Comentarios
. Todos los titulares!
. Estadisticas
. Guia de estilo
. ¿Sugerencias?
. Wiki
. XML [Ayuda]
Listas de correo
. Archivos bulmailing
. Archivos BulmaGes
Radio libre :-)
. Des de la Xarxa (Archivos)
. Mallorca en Xarxa
Busquedas

+ Enlaces Linux
Ultimos kernels
(02/09/2010 18:16:25)
    
Google


En bulma.net
En internet
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.


Imprimir
Version para
imprimir

Imprimir
Version
PDF
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

 
GRACIAS
Distribuciones Universal
Por el servidor
Dpto. de Matematicas e Informatica
Calificacion
***0
Vots: 16
Danos tu opinion:
**** Excelente
***0 Muy Bueno
**00 Bueno
*000 Regular
0000 Malo
Relacionados
. Verificación de tarjeta de crédito en JavaScript
SECCIONES
Noticia
Breve
Truco
Enlace
Participa
Proyecto
Articulo
Webbulma
Manoletada :-)
Seguridad
Modificado: 3/8/2010 12:41:26 | Tiempo Total: 0.071 segs | Kernel: Linux - i686 - 2.6.26-1-686 | Last boot: 02/09/2010 20:12 CEST
Powered by Apache    MySQL    PHP    Gimp