Código de PHP - Validar numero CUIT

Validar numero CUITgráfica de visualizaciones


PHP

estrellaestrellaestrellaestrellaestrella(6)
Publicado el 03 de Julio del 2003 por Sebastian Grosso
18.794 visualizaciones desde el 03 de Julio del 2003. Una media de 28 por semana
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(6)

Publicado el 03 de Julio del 2003gráfica de visualizaciones de la versión: Versión 1
18.795 visualizaciones desde el 03 de Julio del 2003. Una media de 28 por semana
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 (6)

Ruben Acosta
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
Pablo Gonzalez Mateos
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
Fernando Gonzalez
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
einacio
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
Sebastian
05 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
Sebastian
05 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

Comentar la versión: Versión 1

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

http://lwp-l.com/s703