Foros del Web » Programando para Internet » PHP »

Cansao de buscar algo para validar CIF, (Ayuda)

Estas en el tema de Cansao de buscar algo para validar CIF, (Ayuda) en el foro de PHP en Foros del Web. Hola amigos, estoy creando un directorio de empresas, y en el formulario de registro tengo puesto un campo para recoger el CIF de las empresas, ...
  #1 (permalink)  
Antiguo 22/06/2009, 09:18
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Pregunta Cansao de buscar algo para validar CIF, (Ayuda)

Hola amigos, estoy creando un directorio de empresas, y en el formulario de registro tengo puesto un campo para recoger el CIF de las empresas, lo que quiero saber es como puedo validar que lo que ha introducido es correcto? El CIF consta de 9 caracteres. El primero (posición 1) es una letra.

El php lo llevo asi de momento no se asusteis que solo es el principio jeje :P

Código PHP:
<?php

// Preguntaremos si se han enviado ya las variables necesarias 
if (isset($_POST["razonsocial"])) { 
$razonsocial $_POST["razonsocial"];
$cif $_POST["cif"];
$descripcion $_POST["descripcion"];
$paginaweb $_POST["paginaweb"];
$pais $_POST["pais"];
$ciudad $_POST["ciudad"];
$direccion $_POST["direccion"];
$telefono $_POST["telefono"];
$fax $_POST["fax"];
$nombre $_POST["nombre"];
$apellido1 $_POST["apellido1"];
$apellido2 $_POST["apellido2"];
$cargo $_POST["cargo"];


// Hay campos en blanco 
if($razonsocial==NULL|$cif==NULL|$descripcion==NULL|$pais==NULL|$ciudad==NULL|$direccion==NULL|$telefono==NULL|$nombre==NULL|$apellido1==NULL|$apellido2==NULL|$cargo==NULL){ 
echo 
"Hay campos en blanco"
}else{
echo 
"No Hay campos en blanco";

}
}
?>
Si no sabes lo que es el CIF mira esta web http://es.wikipedia.org/wiki/C%C3%B3...%C3%B3n_fiscal
  #2 (permalink)  
Antiguo 22/06/2009, 09:20
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Usa preg_match()
  #3 (permalink)  
Antiguo 22/06/2009, 09:34
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

como he de usar preg_match() para validar que lo introducido sea de una letra y 8 cifras? No se como se usa eso y el resultado tiene que ser una cosa asi (A12345678).
  #4 (permalink)  
Antiguo 22/06/2009, 09:36
Avatar de AnisDelMono  
Fecha de Ingreso: febrero-2007
Ubicación: Pas de la Casa
Mensajes: 247
Antigüedad: 17 años, 2 meses
Puntos: 7
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

is_numeric para saber si la cadena es un numero

strolen, para conseguir la longitud de una cadena
__________________
=>=>=>=>=>=>=>=>=>=>=>=>=>
¡Disidente!
Frente Popular de Judea, Life of Brian
  #5 (permalink)  
Antiguo 22/06/2009, 09:41
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

is_numeric, la cadena no es totalmente un numero ya que lleva una letra delante no se si eso tiene algo que ver :D
  #6 (permalink)  
Antiguo 22/06/2009, 09:46
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Prueba con esto:
function letraNIF($nif) {
return substr("TRWAGMYFPDXBNJZSQVHLCKE",$nif%23,1);
//esta operacion me va a devolver la letra. Lo que hace es dividir el dni por
//modulo 23, y el resultado es la posicion en la cadena de la letra
}
function cif_ok(&$cif) {
$cif=trim($cif); //supresion de blancos
$letras="T|R|W|A|G|M|Y|F|P|D|X|B|N|J|Z|S|Q|V|H|L|C |K|E"; //letras permitidas
//en el cif, | indica optativa entre esas letras
$patron_ok=eregi("^($letras)-([0-9]{8})$",$cif,$v); //comprobando el patron de nif
if (patron_ok) {
if (letraNIF($v[1])!=$v[2]){
return false; //si la letra es incorrecta devolver no valido
}
else{
return true; //si la letra es correcta, validar
}
}
else{
return false; //si el patron no es correcto, devolver falso
}
}
__________________
Dando cabezados se aprende...
  #7 (permalink)  
Antiguo 22/06/2009, 09:51
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

eso no es suficiente, alguien se podría inventar un CIF con ese patrón y no tendría por que ser correcto. lo que tienes que hacer aparte de comprobar el patrón, es empezar a dividir el CIF por la info que contiene luego validar cada parte, en la url de la wiki que pones hay varios ejemplos de como hacerlo en diferentes códigos. intenta trasladarlo a PHP y tendrás una perfecta validación.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #8 (permalink)  
Antiguo 22/06/2009, 09:53
Avatar de jcxnet  
Fecha de Ingreso: octubre-2005
Ubicación: Perú
Mensajes: 784
Antigüedad: 18 años, 6 meses
Puntos: 56
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Para que no te canses más ;) prueba alguno de estos a ver si te sirve:
http://bulma.net/impresion.phtml?nIdNoticia=2248
http://www.webtaller.com/construccio...alidar-cif.php
http://www.programacion.com/php/codigo/106/

__________________
►I'm a devil on the run ♂
Jcxnet.com
*Keep It Simple **
  #9 (permalink)  
Antiguo 22/06/2009, 09:54
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Hola de nuevo, gracias aliza por tu funcion pero esque lo veo muy lioso para mi . Mirad como ya estaba liao con el codigo decir que lo que he hecho demas es comprobar que la longitud maxima y minima sea 9, ahora como hago para que lo valide solo si se ha escrito al principio una letra y luego 8 numeros?

Va asi :D:

Código PHP:
// Hay campos en blanco 
if($razonsocial==NULL|$cif==NULL|$descripcion==NULL|$pais==NULL|$ciudad==NULL|$direccion==NULL|$telefono==NULL|$nombre==NULL|$apellido1==NULL|$apellido2==NULL|$cargo==NULL){ 
echo 
"Hay campos en blanco"
}else{
echo 
"<br>No Hay campos en blanco";
if (
strlen($cif)<9)
{
echo 
"<br>Mínimo 9 carácteres";
}else{
echo 
"<br>Minimo esta bien";
if (
strlen($cif)>9)
{
echo 
"<br>Máximo 9 carácteres";
}else{
echo 
"<br>Máximo esta bien";

}
}
}

  #10 (permalink)  
Antiguo 22/06/2009, 09:57
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

ah! por cierto, el patrón de Aliza está mal construido pues la última letra puede ser "valga la redundancia" una letra o un dígito...
lo que te recomiendo para validarlo es que primero midas la longitud con strlen(),
luego comprobar la primera posición que siempre será una letra. y hacer lo que te dije antes.
recuerda que con $string{n} puedes acceder al carácter en la posición n y que empieza a contar desde CERO.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #11 (permalink)  
Antiguo 22/06/2009, 10:01
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Con expresiones regulares lograrias lo que propones como lo dijo abimaelrc mas arriba
Aqui


Aqui un pequeño manual de como usarlas ( lo saque de una web no es mio )


Las expresiones regulares son unas de las herramientas mas utiles con las cuales puede contar un programador, cuando se trata de procesar textos. Sirven para definir un patron de caracteres que puede ser buscado dentro de un texto, y una vez encontrado dentro del texto podemos extraer o reemplazar partes de este. Por ahora parece algo muy estupido como para tener en cuenta, pero les puedo asegurar que es mucho mas que buscar y reemplazar. Seguramente los usuarios de Unix o Linux conocen las expresiones regulares ya que gran cantidad de las herramientas de estos sistemas operativos las utilizan.

Como no podia faltar, en PHP existen funciones que implementan expresiones regulares, para ser mas precisos son 2 paquetes de funciones, uno que es (casi) compatible con las expresiones regulares de Perl, y otro que es compatible con POSIX, el estandard usado en Unix. Yo voy a utilizar el paquete compatible con Perl, porque tiene algunas funciones mas que el otro, es mas rapido, y porque me gusta mas . Igual las diferencias no son muchas, asi que las ideas basicas se pueden aplicar usando tanto uno u otro paquete.

Una expresion regular se define textualmente, el patron se encierra entre caracteres especiales denominados delimitadores. Tradicionalmente el caracter delimitador es "/", por lo tanto una expresion regular tiene esta pinta: "/..../". Despues del segundo caracter delimitador se pueden incluir ciertos caracteres que cambian la forma en que se ejecuta el patron, estos se los llama modifadores. Por ejemplo el modificador "i" se utiliza para decir que un patron es "case insensitive", o sea, que no distingue entre mayusculas y minusculas. Segun tengo entendido se puede usar otro caracter aparte de "/" como delimitador siempre y cuando este no sea un numero o un caracter del alfabeto.

Existen ademas varios caracteres con significado especial, entre estos el simbolo "$" que tambien tiene un significado especial para PHP si lo usamos entre comillas dobles, por eso recomiendo usar comillas simples al definir una expresion regular en PHP. Para quitarle el significado especial a uno de estos caracteres se debe anteponer la barra invertida "\". Existen tambien ciertos caracteres especiales que se escriben usando la barra invertida, por ejemplo el salto de linea "\n", el tabulador "\t", o la misma barra invertida "\\" (hay que escribirla asi para no confundirla con algun caracter especial).

Ahora PHP tambien usa la barra invertida para ciertos caracteres especiales al definir textos, por ejemplo , si escribimos "\n" en PHP (notese las comillas dobles), estamos indicando un texto con un salto de linea. Pero si escribimos '\n' (con comillas simples), lo que estamos indicando es el texto "\n". Dentro de las comillas simples solo existen 2 caracteres especiales que se escriben con la barra invertida, '\'' la comilla simple, y '\\' la barra invertida. Esto puede ser bastante confuso y por lo comun trae problemas ya que a veces lo que escribimos en codigo PHP no resulta ser lo que queremos, pero es mejor ver esto antes de empezar, pero si estan impacientes pueden saltear esto y volver cuando las cosas que prueben empiezen a fallar por razones desconocidas.

Veamos algunos casos en que la barra invertida nos puede traer dolores de cabeza:

Código:

// Queriamos escribir un patron que contenga al caracter delimitador "/", como
// este es especial le tenemos que poner adelante "\"

$patron = "/\//";

// Pero aca lo que va a pasar es que las comillas dobles le quitan la barra
// invertida y $patron queda "///", lo que va a provocar un error al usarlo
// como expresion regular. Deberiamos usar:

$patron = "/\\//";
$patron = '/\//';

// Queriamos escribir un patron que contenga una barra invertida, tenemos
// que escribirla "\\"

$patron = '/\\/';

// Pero \\ es especial para las comillas simples y $patron se convierte en
// "/\/", y al usarla como expresion regular nos va a decir que falta el
// delimitador final, ya que "\/" no se considera limitador
// Deberiamos escribirlo asi:

$patron = '/\\\\/';




Para poder probar las cosas que aprendemos aca lo mejor es conocer como ejecutar un expresion regular (lo que comunmente se denomina "matchear" una expresion regular). Para eso veamos 2 funciones basicas para el uso de expresiones regulares en PHP: preg_match y preg_replace. Por ahora solo vamos a ver como es el funcionamiento basico, o sea, lo que necesitamos saber para probar las expresiones regulares.

La funcion preg_match recibe en el primer parametro la expresion regular y en el segundo parametro el texto donde matchearla, y nos devuelve un 1 si matchea, un 0 si no, o false si ocurrio un error (si ocurre un error va a mostrar un warning).

La funcion preg_replace recibe en el primer parametro la expresion regular, en el segundo el texto a usar para reemplazar, y en el tercer parametro el texto donde matchear la expresion regular. La funcion devuelve el texto donde se reemplaza todos los matches de la expresion por el texto indicado.

Ahora veamos como armar nuestra primer expresion regular.

Un patron puede estar conformado por una secuencia de caracteres que no tengan significado especial, estos se van a matchear tal cual. En otras palabras podemos crear un patron para buscar un texto determinado:
  #12 (permalink)  
Antiguo 22/06/2009, 10:02
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 9 meses
Puntos: 32
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Código:

if (preg_match('/@hotmail/', $email)) {
// etc...
}





Los corchetes ([ ]) son caracteres especiales dentro de un patron, y se utilizan para indicar que en dicha posicion se matchea cualquiera de los caracteres dentro de los corchetes. Por ejemplo:

Código:

if (preg_match('/PHP[45]/', $version)) {
...etc..
}

A este tipo de patrones se los llama "clases de caracteres".

Podemos definir una clase de caracteres usando un rango de caracteres, por ejemplo: [a-z], [0-9], [A-Za-z]. Al usar el caracter - dentro de la clase le estamos indicando que incluya en la clase todos los caracteres que estan entre el caracter a la derecha y el caracter a la izquierda. Notese que los caracteres se ordenan segun el estandar ASCII, asi que el rango [A-z] va a contener mas caracteres de los que pensamos.

Ademas podemos indicar que una clase de caracteres son todos los caracteres menos los indicados en la lista poniendo el caracter ^ justo despues del corchete, por ejemplo: [^a] matchea cualquiera caracter salvo el caracter "a", [^0-9] matchea cualquiera caracter no numerico.

Ademas existen algunas clases predefinidas, por ejemplo el caracter "." (punto), que matchea todos los caracteres salvo el salto de linea (se puede hacer que el . matchee tambien el salto de linea usando el modificador "s").

Otros clases especiales:
\d - Matchea todos los numeros
\D - Matchea todos los caracteres que no sean numeros
\w - Matchea todos los caracteres que puedan formar una palabra (el alfabeto, los numeros y el guion bajo, y dependiendo de la configuracion las letras con acentos)
\W - Matchea los caracteres que no pertenecen a \w
\s - Matches todos los caracteres que representen un espacio vacio
\S - Matchea los caracteres que no pertenecen a \s




Podemos armar patrones que indiquen la repeticion de un cierto caracter o patron, por ejemplo, podemos armar un patron para determinar si un texto representa un entero positivo si en este definimos una repeticion de los digitos decimales, o sea, varias veces un numero entre el 0 y el 9.

Veamos como hacer algo de este estilo. Para esto se utilizan los caracteres especiales * + y ?.

El caracter * indica que el caracter o patron anterior a este caracter puede aparecer infinita cantidad de veces o ninguna ves. Por ejemplo el patron "a*" matchea con "" (la cadena vacia), "a", "aa", "aaa", etc....

El caracter + indica 1 o mas repeticiones, o sea que "a+" matchea con "a", "aa", "aaa", pero no con "".

El caracter ? indica 1 aparicion o ninguna, o sea que "a?" matchea con "" y "a", pero no con "aa", "aaa", etc...

Podemos usar estos caracteres para repetir un caracter cualquiera, una clase de caracteres ( [a-z]* , \s+ , .* ), o un subpatron (que vamos a ver dentro de poco).

Con este en mente podemos armar un patron que matchee con numeros enteros:
/[0-9]+/
pero tal vez este patron no nos de el resultado que quisieramos al usarlo con preg_match ya que este patron va a matchear con cualquier texto que tenga al menos un caracter numerico. Mas adelante vamos a ver como armar el patron para que matchee unicamente si lo hace con todo el texto donde estamos aplicando la expresion regular (cuando veamos assertions simples).

----

Existe otra manera mas flexible de indicar repeticion, en la cual podemos indicar exactamente cuantas veces aparece el patron repetido. Para esto se usa la notacion "{min,max}", por ejemplo "a{2,4}" matchea solo con "aa", "aaa"y "aaaa". Si no explicitamos el maximo se considera que puede haber infinitas repeticiones, entonces el "*" tambien se puede escribir "{0,}", y el "+" se puede escribir "{1,}".

Si solo queremos que cierto patron se repita cierta cantidad de veces usamos la notacion "{cant}", por ejemplo, "a{3}" matchea solo con "aaa".



Los "assertions" (no conozco un termino en español) sirven para determinar entre que elementos se encuentra un patron, o sea, por defualt un patron puede matchear en cualquier lado del texto que se esta evaluando, con los assertions podemos determinar que es lo que aparece antes o despues de un patron. Por ejemplo si queremos que un patron matchee solo al principio del texto, o al final, o en el texto completo.

Aca veremos solo los assertions mas simples.

El caracter especial ^ cuando se encuentra al principio del patron indica que el patron debe matchear desde el principio de la linea. Por default las funciones de expresiones regulares asumen que el texto que se evalua es una sola linea, asi que ^ significa "al principio del texto evaluado" (ver mas adelante como varia ^ cuando se esta en modo multilinea).

El caracter especial $ cuando se encuentra al final del patron indica que debe matchear con el final de la linea. Cuando se considera el texto como una unica linea, $ significaria "con el final del texto". Hay que tener en cuenta que si existiese un salto de linea al final del texto, el caracter este se consideraria "el final del texto", miren este ejemplo para entender esto:

Código:

// aca vamos a usar el tercer parametro opcional de preg_match
// en este parametro podemos indicar una variable que, luego de
// ejecutada la funcion, contendra un arreglo donde el indice 0
// contendra el texto que matcheo con el patron

if (preg_match('/^[0-9]+$/', "145", $matches)) {
// vamos a entrar aca
echo $matches[0]; // muestra "145"
}

if (preg_match('/^[0-9]+$/', "145\n", $matches)) {
// vamos a entrar aca, porque el salto de linea es considerado el
// final del texto, entonces matches con $
echo $matches[0]; // muestra "145" no "145\n", porque los assertions
// no son considerados parte del texto matcheado
}

Modo multilinea

Al usar el modificador m en una expresion regular le estamos indicando que deje de considerar el texto como una unica linea. Esto modifica el comportamiento de ^ y $. Ahora estos caracteres no solo matchean el inicio o el fin del texto, sino el inicio o el fin de cualquier linea dentro del texto, o sea, matchean contra cualquier salto de linea que encuentren.

Otros assertions

\A - inicio del texto
\Z - fin del texto o salto de linea al final
\z - fin del texto
\b - una posicion que sea el inicio o el fin de una palabra (ver el significado de "palabra" en la clase de caracter \w)
\B - una posicion que no sea el inicio o el fin de una palabra




Los subpatrones son las porciones de un patron delimitadas mediante parentesis.

Un subpatron tiene varios usos, se puede utilizar con los caracteres de repeticion para indicar que esa porcion del patron aparece varias veces. Por ejemplo /(<br>)+/, que matchea contra uno o mas saltos de linea de HTML.

Ademas si utilizamos la funcion preg_match con el tercer parametro, este se convierte en un arreglo con los textos de los subpatrones matcheados, usando como indice el numero de subpatron. Los subpatrones se numeran segun el orden en que aparecen en la expresion regular, y se reserva el indice 0 para el texto matcheado por el patron completo. Veamos un ejemplo para entender esto:

Código:

preg_match('/<b>(.*)<\\/b>/', 'Esta palabra esta en <b>negrita</b>', $matches);

echo $matches[1]; // va a escribir "negrita"

Tambien podemos usar los subpatrones para reescribir el texto matcheado al usar la funcion preg_replace usando el contenido de los subpatrones. Para incluir el contenido de un subpatron en el texto a usar como reemplazo se utiliza la barra invertida (\) seguida por el numero de subpatron. Por ejemplo:

Código:

echo preg_replace('/<b>(.*)<\\/b>/', '<i>\1</i>','Esta palabra esta en <b>negrita</b>');
// lo anterior va a escribir: Esta palabra esta en <i>negrita</i>

A la notacion "\<numero de subpatron>" para referirse al contenido de un subpatron se la llama "referencia hacia atras" (back-reference) y se puede utilizar tambien dentro de un patron. En este caso el patron va a matchear si en el lugar de la back-reference aparece el mismo contenido matcheado antes por el subpatron. Por ejemplo: /<([^>]+)>.*<\/\1>/
Que matchearia contra: <b>....</b>
O: <i>....</i>
O: <td>...</td>




El caracter "|" se utiliza en una expresion regular para incluir un patron alternativo, que se utilizara si el anterior falla. Por ejemplo /hombre|mujer/ matcheara tanto contra un texto que contenga la palabra "hombre" o la palabra "mujer".

Tambien podemos usarlo dentro de un subpatron para especificar un subpatron alternativo, por ejemplo: /<(table|tr|td)>.*<\/\1>/. Observen que podemos incluir mas de un patron alternativo. Es importante recordar que los patrones se van a testear en el orden en que aparecen en la expresion regular, veamos un ejemplo donde es importante el orden de los patrones alternativos:

Código:

preg_match('/(.*)(<|<=)(.*)/', '3<=4', $matches);
echo $matches[1]; //escribe "3"
echo $matches[2]; //escribe "<"
echo $matches[3]; //escribe "=4"

preg_match('/(.*)(<=|<)(.*)/', '3<=4', $matches);
echo $matches[1]; //escribe "3"
echo $matches[2]; //escribe "<="
echo $matches[3]; //escribe "4"




Espero te sirva
  #13 (permalink)  
Antiguo 22/06/2009, 10:06
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

No era más fácil poner el Link? ocuparías menos espacio...
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #14 (permalink)  
Antiguo 22/06/2009, 10:30
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Que pasa jaao_death, el único que me dice que lo mío está mal y eres vecino jajaja. Es coña. Soy de Murcia también.
Ese código no está bien no, pero tampoco vamos a darlo mascado...Algo ayuda Es un código que usé hace tiempo y que tenía por ahí guardado.
Saludos.
__________________
Dando cabezados se aprende...
  #15 (permalink)  
Antiguo 22/06/2009, 10:31
Avatar de aliza  
Fecha de Ingreso: diciembre-2008
Mensajes: 156
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Cita:
Iniciado por aliza Ver Mensaje
Que pasa jaao_death, el único que me dice que lo mío está mal y eres vecino jajaja. Es coña. Soy de Murcia también.
Ese código no está bien no, pero tampoco vamos a darlo mascado... Algo ayuda. Es un código que usé hace tiempo y que tenía por ahí guardado.
Saludos.
__________________
Dando cabezados se aprende...
  #16 (permalink)  
Antiguo 22/06/2009, 10:35
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

jeje, no es nada, pienso igual, siempre hay que ayudar, no hacer el trabajo de otros...., haber si algún nos vemos por aquí y hacemos unas cuantas burradas con el pc. jeje...
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #17 (permalink)  
Antiguo 22/06/2009, 11:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Bien sencillo para una letra y 8 numeros con el preg_match haces esto

Código PHP:
$varible_a_verificar "A12345678";
if(
preg_match("|^\w\d{8}$|",$varible_a_verificar)){
    
//Se valido, aqui va entonces el codigo
    
echo "valido";
}else{
    
//No se valido escribe otro codigo
    
echo "No es valido";

  #18 (permalink)  
Antiguo 22/06/2009, 17:12
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

abimaelrc funciona casi del todo bien del modo que tu dices, mira si pongo una letra en cualquier lao que no sea el principio da como cif no valido y si la pongo delante y detras los 8 dijitos tambien lo da como valido, pero el problema es que si pongo los 9 digitos numericos tambien los da como valido, en que falla?

lo llevo asi:

Código PHP:
<?php

// Preguntaremos si se han enviado ya las variables necesarias 
if (isset($_POST["razonsocial"])) { 
$razonsocial $_POST["razonsocial"];
$cif $_POST["cif"];
$descripcion $_POST["descripcion"];
$paginaweb $_POST["paginaweb"];
$pais $_POST["pais"];
$ciudad $_POST["ciudad"];
$direccion $_POST["direccion"];
$telefono $_POST["telefono"];
$fax $_POST["fax"];
$nombre $_POST["nombre"];
$apellido1 $_POST["apellido1"];
$apellido2 $_POST["apellido2"];
$cargo $_POST["cargo"];


// Hay campos en blanco 
if($razonsocial==NULL|$cif==NULL|$descripcion==NULL|$pais==NULL|$ciudad==NULL|$direccion==NULL|$telefono==NULL|$nombre==NULL|$apellido1==NULL|$apellido2==NULL|$cargo==NULL){ 
echo 
"Hay campos en blanco"
}else{
echo 
"<br>No Hay campos en blanco";
if (
strlen($cif)<9)
{
echo 
"<br>Mínimo 9 carácteres";
}else{
echo 
"<br>Minimo esta bien";
if (
strlen($cif)>9)
{
echo 
"<br>Máximo 9 carácteres";
}else{
echo 
"<br>Máximo esta bien";

if(
preg_match("|^\w\d{8}$|",$cif)){
    
//Se valido, aqui va entonces el codigo
    
echo "<br>Cif valido";
}else{
    
//No se valido escribe otro codigo
    
echo "<br>Cif No valido";

}
}
}
}
?>
  #19 (permalink)  
Antiguo 23/06/2009, 07:29
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Corrijo. El problema es que \w es tambien numerico y se me habia olvidado, aqui tienes lo que tu pides

Código PHP:
$varible_a_verificar "A12345678";
if(
preg_match("|^[a-zA-Z]\d{8}$|",$varible_a_verificar)){
    
//Se valido, aqui va entonces el codigo
    
echo "valido";
}else{
    
//No se valido escribe otro codigo
    
echo "No es valido";

  #20 (permalink)  
Antiguo 23/06/2009, 08:21
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

Gracias es verdad ya va perfect, mira tengo un problema y por mucho que cambio los valores no doy con el error, estoy intentando actualizar un registro pero no me lo hace como yo quiero, mira tengo un campo llamado estadoempresa que al registrarse la empresa se registra como 0, ahora lo que intento es que me cambie al 1 mediante el formulario que tengo hecho pero lo que me registra en el campo es el id del registro y no logro solucionarlo, donde estoy fallando?

Código PHP:
<?php

// conectamos a la base de datos
include("../../../reg/config.php");

// recogemos el ID
// del registro a actualizar
if(isset($_GET['id_empresa'])){
$id $_GET['id_empresa'];
// hacemos una consulta
// para mostrar los datos
$sql mysql_query("SELECT * FROM directorioempresas
WHERE id_empresa = $id"
$db_link)
or die(
mysql_error());
$row mysql_fetch_array($sql);
// advertimos
$mensaje "Actualizar los datos de la empresa <b>$row[razonsocial]</b>";
}
// comprobamos si
// ha sido enviado el formulario
if(isset($_POST['actualizar']) && $_POST['actualizar'] == 'Actualizar'){
// comprobamos que no lleguen campos vacios
if(!empty($_POST['estadoempresa'])){
// creamos las variables
// que vamos a usar en la consulta UPDATE
// y le asignamos sus valores
$id $_POST['id_empresa'];
$estadoempresa $_POST['estadoempresa'];
// la consulta UPDATE
$sqlUpdate mysql_query("UPDATE directorioempresas
SET estadoempresa = '$estadoempresa'
WHERE id_empresa = '$id'"
$db_link)
or die(
mysql_error());
echo 
"Registro actualizado correctamente";
}else{
echo 
"debe llenar todos los campos";
}
}else{
// mostramos el mensaje
echo "<p>".$mensaje."</p>";
?>
<!--
el formulario.
los values de los campos
son los valores que optenemos
de la consulta SELECT
-->
<form name="actualizar-registro" method="post" action="<?php $_SERVER['PHP_SELF']; ?>"><br />
Poner 1 para aceptar empresa: <input type="text" name="estadoempresa" value="<?php echo $row['estadoempresa']; ?>" /><br />
<input type="hidden" name="id_empresa" value="<?php echo $row['id_empresa']; ?>" />
<input type="submit" name="actualizar" value="Actualizar" />
</form>
<?php ?>
  #21 (permalink)  
Antiguo 23/06/2009, 08:37
Avatar de rompeguesos  
Fecha de Ingreso: marzo-2009
Mensajes: 692
Antigüedad: 15 años, 1 mes
Puntos: 8
Respuesta: Cansao de buscar algo para validar CIF, (Ayuda)

ya he solucionado el fallo esque le daba ya un valor y al yo insertar otro en la caja de texto se me duplicaba :D, vale ahora tengo otro problema, que pasa si quiero volver a actualizar el estado a 0? esq lo e intentado y al poner 0 me dice que el campo esta vacio :D
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:07.