como validar DNI CON PHP, MEDIANTE UNA FUNCION????????
Necesitaria una funcion en php, que me ayude a validar un dni/nif y saber si es correcto o no.
Me podeis ayudar???
Un saludo y gracias por adelentado
Me podeis ayudar???
Un saludo y gracias por adelentado
Con código PHP directamente o una función javascript si la validación la haces en el cliente.
Saludos
Saludos
Hola,
Aquà te pongo un js que lo hace:
/*
Script para comprobar la validez de
un CIF en España (incluso para sociedades)
*/
function CIFCorrecto(cif)
{
//Comprueba que tenga 9 dÃgitos, el primero debe ser una letra y el resto números
if (!/^([A-Z]d{8})|([PX]d{7}[A-J])$/.test(cif.toUpperCase()))
{
return false;
}
//Comprueba que la letra sea una de las posibles
if (!/^[ABCDEFGHKLMPQSX]/.test(cif.toUpperCase()))
{
return false;
}
//Comprueba el dÃgito de control del CIF
return ComprobarDigitoControlCIF(cif);
}
/*
La siguiente función se encarga de validar el dÃgito de control
*/
function ComprobarDigitoControlCIF(cif)
{
var arrayCIF
var sumaDigitosPares = 0;
var sumaDigitosImpares = 0;
var numero;
var arrayNumero;
var digitoControl;
//mete el cif en un array
arrayCIF = cif.split("");
//Si no tiene 9 caracteres es incorrecto
if (arrayCIF.length != 9)
{
return false;
}
//Suma los dÃgitos pares de la cadena resultante de quitar el primer y último caracter del CIF
for(i = 2; i < arrayCIF.length - 1; i = i + 2)
{
sumaDigitosPares = sumaDigitosPares + parseInt(arrayCIF[i]);
}
//Multiplicar por 2 los dÃgitos impares de la cadena resultante de quitar el primer y último caracter del CIF
//y con cada resultado, sumar sus dÃgitos.
//Sumarlo todo
for(i = 1; i < arrayCIF.length - 1; i = i + 2)
{
numero = arrayCIF[i] * 2;
if (numero > 9)
{
numero = (numero % 10) + 1
}
sumaDigitosImpares = sumaDigitosImpares + numero;
}
//Sumar la suma de dÃgitos pares y la de dÃgitos impares
//Coger la última cifra del número obtenido y restarle 10
numero = sumaDigitosPares + sumaDigitosImpares
for (i = numero; i >= 0; i = i - 10)
{
numero = i;
}
digitoControl = 10 - numero;
//Para los tipos de sociedades P y X el dÃgito de control debe ser una letra
if (arrayCIF[0].toUpperCase() == "P" || arrayCIF[0].toUpperCase() == "X")
{
digitoControl = String.fromCharCode(digitoControl + 64);
}
//Comprueba si el dÃgito de control se corresponde correctamente
if (digitoControl.toString() == arrayCIF[8])
{
return true;
}
else
{
return false;
}
}
Aquà te pongo un js que lo hace:
/*
Script para comprobar la validez de
un CIF en España (incluso para sociedades)
*/
function CIFCorrecto(cif)
{
//Comprueba que tenga 9 dÃgitos, el primero debe ser una letra y el resto números
if (!/^([A-Z]d{8})|([PX]d{7}[A-J])$/.test(cif.toUpperCase()))
{
return false;
}
//Comprueba que la letra sea una de las posibles
if (!/^[ABCDEFGHKLMPQSX]/.test(cif.toUpperCase()))
{
return false;
}
//Comprueba el dÃgito de control del CIF
return ComprobarDigitoControlCIF(cif);
}
/*
La siguiente función se encarga de validar el dÃgito de control
*/
function ComprobarDigitoControlCIF(cif)
{
var arrayCIF
var sumaDigitosPares = 0;
var sumaDigitosImpares = 0;
var numero;
var arrayNumero;
var digitoControl;
//mete el cif en un array
arrayCIF = cif.split("");
//Si no tiene 9 caracteres es incorrecto
if (arrayCIF.length != 9)
{
return false;
}
//Suma los dÃgitos pares de la cadena resultante de quitar el primer y último caracter del CIF
for(i = 2; i < arrayCIF.length - 1; i = i + 2)
{
sumaDigitosPares = sumaDigitosPares + parseInt(arrayCIF[i]);
}
//Multiplicar por 2 los dÃgitos impares de la cadena resultante de quitar el primer y último caracter del CIF
//y con cada resultado, sumar sus dÃgitos.
//Sumarlo todo
for(i = 1; i < arrayCIF.length - 1; i = i + 2)
{
numero = arrayCIF[i] * 2;
if (numero > 9)
{
numero = (numero % 10) + 1
}
sumaDigitosImpares = sumaDigitosImpares + numero;
}
//Sumar la suma de dÃgitos pares y la de dÃgitos impares
//Coger la última cifra del número obtenido y restarle 10
numero = sumaDigitosPares + sumaDigitosImpares
for (i = numero; i >= 0; i = i - 10)
{
numero = i;
}
digitoControl = 10 - numero;
//Para los tipos de sociedades P y X el dÃgito de control debe ser una letra
if (arrayCIF[0].toUpperCase() == "P" || arrayCIF[0].toUpperCase() == "X")
{
digitoControl = String.fromCharCode(digitoControl + 64);
}
//Comprueba si el dÃgito de control se corresponde correctamente
if (digitoControl.toString() == arrayCIF[8])
{
return true;
}
else
{
return false;
}
}
Hola Zelda Predator:
He visto tu código y me ha parecido algo bastante interesante. Mientras que en otros foros y consultas se limitan a comprobar que el dÃgito de control (el último de los nueve) es igual al que se le ha metido como parámetro de entrada y ya está, tú te mojas en decir que si la sociedad es de tipo P o X tiene que ser una letra.
Me puedes decir de donde has sacado esta información? te lo digo pq tengo la intuición que además de la P y X se debe hacer lo mismo en caso de sociedades Q y S.
Si me lo puedes confirmar además con alguna página oficial serÃa la releche.
Un saludo y gracias de antemano.
He visto tu código y me ha parecido algo bastante interesante. Mientras que en otros foros y consultas se limitan a comprobar que el dÃgito de control (el último de los nueve) es igual al que se le ha metido como parámetro de entrada y ya está, tú te mojas en decir que si la sociedad es de tipo P o X tiene que ser una letra.
Me puedes decir de donde has sacado esta información? te lo digo pq tengo la intuición que además de la P y X se debe hacer lo mismo en caso de sociedades Q y S.
Si me lo puedes confirmar además con alguna página oficial serÃa la releche.
Un saludo y gracias de antemano.