Código de PHP - Validar numero CUIT

sin imagen de perfil

Validar numero CUITgráfica de visualizaciones


PHP

Publicado el 3 de Julio del 2003 por Sebastian Grosso
28.893 visualizaciones desde el 3 de Julio del 2003
Función que sirve para validar un numero CUIT. Con su correspondiente control de errores y devolviendo el resultado en una variable pasada por referencia en los parámetros.

Versión 1
estrellaestrellaestrellaestrellaestrella(8)

Publicado el 3 de Julio del 2003gráfica de visualizaciones de la versión: Versión 1
28.894 visualizaciones desde el 3 de Julio del 2003
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?
function UfValidStrCuit($cuit,&$resultado)
{
 
	$coeficiente[0]=5;
	$coeficiente[1]=4;
	$coeficiente[2]=3;
	$coeficiente[3]=2;
	$coeficiente[4]=7;
	$coeficiente[5]=6;
	$coeficiente[6]=5;
	$coeficiente[7]=4;
	$coeficiente[8]=3;
	$coeficiente[9]=2;
 
	$resultado=1;
 
	for ($i=0; $i < strlen($cuit); $i= $i +1) {    //separo cualquier caracter que no tenga que ver con numeros
		if ((Ord(substr($cuit, $i, 1)) >= 48) && (Ord(substr($cuit, $i, 1)) <= 57))
		{
			$cuit_rearmado = $cuit_rearmado . substr($cuit, $i, 1);
		}
	}
 
	If (strlen($cuit_rearmado) <> 11) {  // si to estan todos los digitos
		$resultado=0;
	} Else {
		$sumador = 0;
		$verificador = substr($cuit_rearmado, 10, 1); //tomo el digito verificador
 
		For ($i=0; $i <=9; $i=$i+1) {
			$sumador = $sumador + (substr($cuit_rearmado, $i, 1)) * $coeficiente[$i];//separo cada digito y lo multiplico por el coeficiente
		}
 
		$resultado = $sumador % 11;
		$resultado = 11 - $resultado;  //saco el digito verificador
		$veri_nro = intval($verificador);
 
		If ($veri_nro <> $resultado) {
			$resultado=0;
		} else {
			$cuit_rearmado = substr($cuit_rearmado, 0, 2) . "-" . substr($cuit_rearmado, 2, 8) . "-" . substr($cuit_rearmado, 10, 1);
		}
	}
}
?>



Comentarios sobre la versión: Versión 1 (8)

29 de Mayo del 2004
estrellaestrellaestrellaestrellaestrella
Tendras por ahi la validación del RFC (Registro Federal de Causante), que es mas o menos de esta manera:

AOMR-730725-93B

Las primeras son 4 letras unicamente letras la segunda seccion son números y la tercera seccion puede se alfanumericos, tendras alguna validacion en PHP o bien javascrip, gracias
Responder
29 de Julio del 2005
estrellaestrellaestrellaestrellaestrella
Hola, use el codigo de validación de CUIT para un desarrollo, me sirvio, pero no funciona bien en casos en q el digito verificador da 0... lo solicioné con un pequeño parche, ahi va la funcion con el parche de nuevo.
Gracias por el código y espero sirva el parche.
Saludos.
function valida_cuit($cuit,$resultado=0)
{
/* se considera un cuit valido si es un entero de 11 digitos y el ultimo digito verifica. */

$coeficiente[0]=5;
$coeficiente[1]=4;
$coeficiente[2]=3;
$coeficiente[3]=2;
$coeficiente[4]=7;
$coeficiente[5]=6;
$coeficiente[6]=5;
$coeficiente[7]=4;
$coeficiente[8]=3;
$coeficiente[9]=2;

$resultado=1;

for ($i=0; $i < strlen($cuit); $i= $i +1) { //separo cualquier caracter que no tenga que ver con numeros
if ((Ord(substr($cuit, $i, 1)) >= 48) && (Ord(substr($cuit, $i, 1)) <= 57))
{
$cuit_rearmado = $cuit_rearmado . substr($cuit, $i, 1);
}
}

If (strlen($cuit_rearmado) <> 11) { // si to estan todos los digitos
$resultado=0;
} Else {
$sumador = 0;
$verificador = substr($cuit_rearmado, 10, 1); //tomo el digito verificador

For ($i=0; $i <=9; $i=$i+1) {
$sumador = $sumador + (substr($cuit_rearmado, $i, 1)) * $coeficiente[$i];//separo cada digito y lo multiplico por el coeficiente }

$resultado = $sumador % 11;
$resultado = 11 - $resultado; //saco el digito verificador
$veri_nro = intval($verificador);

If ($veri_nro <> $resultado) {
$resultado=0;
} else {
$cuit_rearmado = substr($cuit_rearmado, 0, 2) . "-" . substr($cuit_rearmado, 2, 8) . "-" . substr($cuit_rearmado, 10, 1);
}
}

// PARCHE:
// MANEJA EL CASO DE QUE EL DIGITO DA 0, COMO $resultado DA 0, PARA QUE LA
// FUNCION NO DEVUELVA FALSE FUERZO A QUE DEVUELVA 1

if ($veri_nro == 0) {
$resultado = 1;
}

return($resultado);
}

Responder
11 de Diciembre del 2006
estrellaestrellaestrellaestrellaestrella
No funciona bien, si el resto del sumador dividido 11 da 0, compara el digito verificador con 11 (que es erroneo), deberia verificarlo con 0.
Responder
14 de Septiembre del 2011
estrellaestrellaestrellaestrellaestrella
la verificacion de casos especiales (11 y 10) esta mal hecha. antes de comparar $resultado y $veri_nro agregar

if ($resultado===11){
$resultado=0;
}else if($resultado===10){
$resultado=9;
}
Responder
5 de Diciembre del 2013
estrellaestrellaestrellaestrellaestrella
No funciona bien en estos casos por ejemplo:

20-24123123-1 es valido pero 20-2412312-31 también!!! lo cual es un error,
les paso la funcion completa agregando la correccion de "einacion"

function validarCuit($cuit) {

// valido el formato xx-xxxxxxxx-xx (2-8-1)

$ex = explode('-',$cuit);
if(strlen($ex[0])!=2
|| strlen($ex[1]!=8)
|| strlen($ex[2])!=1) {
return false;
}

$coeficiente[0]=5;
$coeficiente[1]=4;
$coeficiente[2]=3;
$coeficiente[3]=2;
$coeficiente[4]=7;
$coeficiente[5]=6;
$coeficiente[6]=5;
$coeficiente[7]=4;
$coeficiente[8]=3;
$coeficiente[9]=2;
$resultado=1;
$cuit_rearmado = "";
for ($i=0; $i < strlen($cuit);$i= $i +1) {
//separo cualquier caracter que no tenga que ver con numeros
if ((Ord(substr($cuit, $i, 1)) >= 48) && (Ord(substr($cuit, $i, 1)) <= 57)) {
$cuit_rearmado = $cuit_rearmado . substr($cuit, $i, 1);
}
}
if (strlen($cuit_rearmado) <> 11) {
// si to estan todos los digitos
$resultado=0; }
else {
} $sumador = 0;
$verificador = substr($cuit_rearmado, 10, 1);
//tomo el digito verificador
for ($i=0; $i <=9; $i=$i+1) {

$sumador = $sumador + (substr($cuit_rearmado, $i, 1)) * $coeficiente[$i];
//separo cada digito y lo multiplico por el coeficiente }
$resultado = $sumador % 11;
$resultado = 11 - $resultado;
//saco el digito verificador
$veri_nro = intval($verificador);
if ($resultado===11){
$resultado=0;
}else if($resultado===10){
$resultado=9;
}
if ($veri_nro <> $resultado) {
$resultado=0;
} else {
$cuit_rearmado = substr($cuit_rearmado, 0, 2) . "-" . substr($cuit_rearmado, 2, 8) . "-" . substr($cuit_rearmado, 10, 1);
}
}
return $resultado;
}
Responder
5 de Diciembre del 2013
estrellaestrellaestrellaestrellaestrella
PEQUEÑO ERROR DISCULPEN , la parte superior se me chingó un parentesis
reemplazar x esto

// valido el formato xx-xxxxxxxx-xx (2-8-1)

$ex = explode('-',$cuit);
if(strlen($ex[0])!=2
|| strlen($ex[1])!=8
|| strlen($ex[2])!=1) {
echo "no es un codigo valido";
return false;
}
Responder
Adrian
20 de Mayo del 2020
estrellaestrellaestrellaestrellaestrella
Para validar si el cuit contiene la cantidad correcta de numeros (11) utilizar:
//retira cualquier caracter especial que se le haya ocurrido al cliente
$cuit = preg_replace('/[^0-9]/', '', $cuit);
// ahora que tengo los numeros solamente, chequeo que sean 11
if(strlen($cuit) != 11){
return false;
}

En el final, si lo que querés es que la respuesta sea true o false agregar hay que reemplazar el return por:

//Ya valide que tiene 11 caracteres, puedo utilizar el offset de manera segura
return ($cuit[10] == $resultado);
Responder
Martin
14 de Junio del 2020
estrellaestrellaestrellaestrellaestrella
function validar_cuil($cuil){
$cuil = str_replace('-','',trim($cuil));
if (is_numeric($cuil)) return false;
if (strlen($cuil) !== 11) return false;

$factores = array(5,4,3,2,7,6,5,4,3,2);
$sumatoria = 0;
for ($i=0; $i < strlen($cuil)-1; $i++) {
$sumatoria += (substr($cuil, $i, 1))*$factores[$i];
}
$resto = $sumatoria % 11;
$digitoVerificador = ($resto != 0) ? (11 - $resto) : $resto;

return ($digitoVerificador == substr($cuil, strlen($cuil)-1));
}
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s703