Foros del Web » Programando para Internet » PHP »

Validacion CIF/NIF

Estas en el tema de Validacion CIF/NIF en el foro de PHP en Foros del Web. Hola amigos, buenos dias. Tengo que validar una caja de texto que tiene como valor CIFs. Querria preguntar si halguien sabria como hacerlo, tengo uno ...
  #1 (permalink)  
Antiguo 02/05/2006, 01:57
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Validacion CIF/NIF

Hola amigos, buenos dias.

Tengo que validar una caja de texto que tiene como valor CIFs.

Querria preguntar si halguien sabria como hacerlo, tengo uno hecho en visual basic para una aplicación windows, pero he visto por ahí que en aplicaciones web es posible hacerlo mas facil.

Si alguien sabe algo l estaría muy agradecido si me contestase.

Gracias.Adios
  #2 (permalink)  
Antiguo 02/05/2006, 02:27
Avatar de vash-stampede-  
Fecha de Ingreso: abril-2006
Ubicación: En el estómago de una Rana
Mensajes: 441
Antigüedad: 18 años
Puntos: 3
Que es lo que quieres que te valide tan solo que se ha metido el número total de número mas la letra o tambien kieres ke te kompruebe si la letra introducida corresponde a los número?????. Se pueden hacer las dos...
__________________
¡¡¡ Hoy el son de la batalla llegará hasta mi lucharemos hasta vencer o morir, hoy avanzaremos entre toda oscuridad llevando en nuestra sangre el himno de Rohan !!!!!
  #3 (permalink)  
Antiguo 02/05/2006, 02:30
Avatar de vash-stampede-  
Fecha de Ingreso: abril-2006
Ubicación: En el estómago de una Rana
Mensajes: 441
Antigüedad: 18 años
Puntos: 3
//
// Verifica que el NIF o CIF entregado es válido
//
// string $as_dato NIF o CIF a verificar
//
// Retorno 1 Era un NIF, y es correcto
// 2 Era un CIF, y es correcto
// -1 Era un NIF, y es incorrecto
// -2 Era un CIF, y es incorrecto
// 0 No se puede determinar si es NIF o CIF, y es incorrecto

function f_nifcif_verifica($as_dato) {
$li_ret = 0;

// Elimina caracteres no válidos
$as_dato = ereg_replace(\"[^[:alnum:]]\", \"\", $as_dato);

// Averigua si es NIF o CIF (Si lleva la letra al principio, es CIF)
$lb_esCIF=(!is_numeric(substr($as_dato, 0, 1)));
$lb_esNIF=(!is_numeric(substr($as_dato, strlen($as_dato)-1, 1)));

if ($lb_esCIF || $lb_esNIF) {
// Separa los números y las letras
$ls_numero = ereg_replace(\"[[:alpha:]]\", \"\", $as_dato);
$ls_letra = ereg_replace(\"[^[:alpha:]]\", \"\", $as_dato);

//echo \"as_dato=$as_dato; ls_numero=$ls_numero; ls_letra=$ls_letra; lb_esNIF=\".f_bool($lb_esNIF).\"; lb_esCIF=\".f_bool($lb_esCIF).\'<br>\';

if ($lb_esNIF) {
// Verifica que sea NIF
(f_LetraNIF($ls_numero) == $ls_letra)?$li_ret=1:$li_ret=-1;
};

if ($lb_esCIF) {
// Verifica que sea CIF
f_ValidarCIF($ls_numero)?$li_ret=2:$li_ret=-2;
};
}

return $li_ret;
}



//
// Calcula la letra de un NIF
//
// string $dni Números que conforman el DNI o CIF (SIN LETRA)
//
// Retorno string La letra correspondiente
//
function f_LetraNIF ($dni) {
$valor= (int) ($dni / 23);
$valor *= 23;
$valor= $dni - $valor;
$letras= \"TRWAGMYFPDXBNJZSQVHLCKEO\";
$letraNif= substr ($letras, $valor, 1);
return $letraNif;
}



//
// Valida el número CIF
//
// string $ccNumber (El CIF (Sin letra) a verificar)
//
// Retorno boolean true Es correcto
// false No vale
//
function f_ValidarCIF($ccNumber) {
$lb_ret=false;
if (strlen($ccNumber) == 8) {
$lb_ret=true;

$numOfDigits = 0 - strlen($ccNumber);

$i = -1;
while ($i>=$numOfDigits){
if (($i % 2) == 0){
$double = 2*(substr($ccNumber, $i, 1));
$total += substr($double,0,1);
if (strlen($double > 1)){
$total += substr($double,1,1);
}
} else {
$total += substr($ccNumber, $i, 1);
}
$i--;
}

if (($total % 10) != 0){
$lb_ret=false;
}
}
return $lb_ret;
}

Espero que te sirva. Un saludo
__________________
¡¡¡ Hoy el son de la batalla llegará hasta mi lucharemos hasta vencer o morir, hoy avanzaremos entre toda oscuridad llevando en nuestra sangre el himno de Rohan !!!!!
  #4 (permalink)  
Antiguo 02/05/2006, 02:35
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Bale , Muchas gracias seguro que me sirve para mucho. Ahora me toca ami.

Gracias otra vez, SALUDOS
  #5 (permalink)  
Antiguo 02/05/2006, 08:46
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
Hola buenas,

Aqui ando validando el CIF, esta bien tu programa pero he empezado a intentar hacerlo yo tambien guiandome por el tuyo.

Ahora tengo un problemilla que nose como hacerlo:
Cita:
$primletras = "ABCDEFGHKLMNPQSabcdefghklmnpqs";

if (!ereg("^[$primletras]$",substr($_POST['cif'],$i,1)))
{
$error = true;
}

Tengo este codigo, no me da errores pero no me esta validando bien, lo unico que quiero es que coga el primer caractere del string([cif]) que sera una letra , y si esta letra no pertenece a $primletras que me de error.

Estoy utilizando bien ereg() ???

Espero su contestación, Gracias por todo
  #6 (permalink)  
Antiguo 02/05/2006, 08:59
Avatar de vash-stampede-  
Fecha de Ingreso: abril-2006
Ubicación: En el estómago de una Rana
Mensajes: 441
Antigüedad: 18 años
Puntos: 3
Prueba a :

$letra_1 = $_POST[cif];
y luego haz el substr de $letra_1

De todos modos me he fijado en que tienes puesto entre comillas, prueba a ponerlo sin comillas.

Ya diras.
__________________
¡¡¡ Hoy el son de la batalla llegará hasta mi lucharemos hasta vencer o morir, hoy avanzaremos entre toda oscuridad llevando en nuestra sangre el himno de Rohan !!!!!
  #7 (permalink)  
Antiguo 02/05/2006, 09:14
Avatar de unaiu  
Fecha de Ingreso: abril-2006
Mensajes: 139
Antigüedad: 18 años
Puntos: 0
OK gracias ya ma salido.
  #8 (permalink)  
Antiguo 18/05/2006, 06:48
 
Fecha de Ingreso: abril-2006
Mensajes: 16
Antigüedad: 18 años
Puntos: 0
Hay un problemilla con esto

Buenasss.

Me acaba de surgir un problema con una validación que habían realizado en una aplciación y que ahora me encargo de solventar.

El código es "igual" que el que habeis puesto aquí por lo que puedo decir que tiene un problema.

La cuestión es que todo funcionará correctamente cuando el CIF no pertenezca a Corporaciones Locales(Ayuntamientos) ni a Extranjeros. Es decir, letras que comienzan por P y X respectivamente. El problema en estas que os comento es que no terminan en número sino que terminan con una letra. Si alguien sabe como solventar y comprobar tambien con estos tipos...gracias ;)

Aun así seguiré buscando e indagando para ver que tipo de comprobación se hace en estos casos. Si logro dar con ello os aviso, si alguien da antes con ello que me avise xD

Hasta luego y muchas gracias por todo!!!!
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 21:47.