Clave Única de Identificación Tributaria

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda


La Clave Única de Identificación Tributaria (CUIT) es una clave única que se utiliza en el sistema tributario argentino para poder identificar inequívocamente a las personas físicas o jurídicas autónomas, susceptible de tributar. Es asignada por la Administración Federal de Ingresos Públicos, para poder confeccionar el registro o censo de las mismas, para efectos administrativos y tributarios.

Composición[editar]

Consta de un total de once (11) cifras: dos dígitos iniciales que indican el tipo global, seguido por ocho dígitos que corresponden, en el caso de personas físicas, al número de Documento Nacional de Identidad, y en el caso de empresas a un número de sociedad asignado por la AFIP, y finalmente un dígito verificador.

Otros nombres[editar]

Para quienes trabajan en relación de dependencia, el mismo código toma el nombre de CUIL: Código Único de Identificación Laboral.

Quienes necesitan realizar operaciones que implican el pago de tributos (tal como varios tipos de compraventas registradas), pero que no clasifican como empleados o trabajadores autónomos, también pueden obtener de la misma agencia una CDI o Clave de Identificación.

La CUIT como dato personal de carácter público[editar]

La Clave de Identificación Tributaria de las personas físicas es un dato personal, en la medida que vincula a una persona con su identificación tributaria. No obstante, conforme la legislación argentina en materia de datos personales, en particular el artículo 5 de la Ley 25.326 de Protección de Datos Personales, la CUIT es unos de los datos de carácter personal que no requieren el consentimiento de su titular para su tratamiento.[1] Al mismo tiempo, la CUIT de los contribuyentes es un dato de acceso público, que de hecho es publicada por la Administración Federal de Ingresos Públicos a través del Padrón de Personas Físicas y Jurídicas.

Procedimiento para obtener la CUIT[editar]

La CUIT se obtiene en la Administración Federal de Ingresos Públicos, existiendo un trámite para las personas físicas y otro para las personas jurídicas que se describen en el sitio oficial del citado organismo recaudador.[2] El trámite debe realizarse ante la Agencia de la Administración Federal de Ingresos Públicos que corresponda al domicilio de la persona o entidad solicitante.

Procedimiento para obtener el dígito verificador[editar]

Tanto la CUIT (Clave Única de Identificación Tributaria) como el CUIL (Código Único de Identificación Laboral) constan de tres partes: El tipo, el número y el dígito verificador separados por guion. En el siguiente ejemplo se toma como CUIT el número ##-12345678-X, donde ## es el tipo, 12345678 es el número de DNI o número de sociedad y X es el dígito verificador.

Tipo:

  • 20, 23, 24 y 27 Personas Físicas
  • 30, 33 y 34 Empresas

El dígito verificador se calcula usando el algoritmo Módulo 11. Para obtenerlo si no lo conocemos o si queremos calcularlo:

- Se procede a tomar el número de 10 dígitos compuesto por los 2 primeros mas los 8 dígitos siguientes, de derecha a izquierda, multiplicando cada dígito por los números que componen la serie numérica 2,3,4,5,6,7; y sumando el resultado de estos productos, como se muestra a continuación (si se ha aplicado la serie hasta el 7 y quedan dígitos por multiplicar, se comienza la serie nuevamente):

En el ejemplo:

8 × 2 = 16,

7 × 3 = 21,

6 × 4 = 24,

5 × 5 = 25,

4 × 6 = 24,

3 × 7 = 21,

2 × 2 = 4,

1 × 3 = 3,

0 × 4 = 0,

2 × 5 = 10, entonces la suma de los productos es: 16+21+24+25+24+21+4+3+0+10 = SUMA_P

- Al número obtenido por la suma del producto de cada dígito por la serie ya mencionada, se le aplica módulo 11, o sea, se divide por 11 y se determina el resto de la división.

En el ejemplo:

SUMA_MOD11 = SUMA_P modulo 11

Queda en SUMA_MOD11 el resto de dividir por 11

- Ahora se hace 11 menos SUMA_MOD11

ONCEMENOS = 11 - SUMA_MOD11

  • Si el resultado es 11, el dígito verificador será 0.
  • Si el resultado es 10, no existe, es un error. Se debe cambiar el tipo a 23 o 33 y recalcular. Algunos algoritmos verifican erróneamente con 9 sin cambiar el tipo, lo cual es una falla de implementación.
Tipo original Nuevo tipo Dígito verificador
20 (Hombre) 23 9
27 (Mujer) 23 4
24 (Repetido) 23 3
30 (Empresa) 33 9
34 (Repetida) 33 3
  • En otro caso el resultado será el dígito verificador.

Ejemplo Macro en Visual Basic MS Excel[editar]

Public Function ValidarCuit(ByVal Cuit As String) As Boolean
    If Len(Cuit) = 11 Then
        Dim Ponderador As Integer
        Dim Acumulado As Integer
        Dim Digito As Integer

        Ponderador = 2
        Acumulado = 0

        'Recorro la cadena de atrás para adelante
        For Posicion As Integer = 10 To 1 Step -1
            'Sumo las multiplicaciones de cada dígito x su ponderador
            Acumulado = Acumulado + Val(Mid$(Cuit, Posicion, 1)) * Ponderador 
            Ponderador = Ponderador + 1

            If Ponderador > 7 Then Ponderador = 2
        Next
    
        Digito = 11 - (Acumulado Mod 11)
        If Digito = 11 Then Digito = 0

        ValidarCuit = (Digito = Right(Cuit, 1))
    Else
        ValidarCuit = False
    End If
End Function

Código Java[editar]

private boolean validarCuit(String cuit) {
    //Eliminamos todos los caracteres que no son números
    cuit = cuit.replaceAll("[^\\d]", "");
    //Controlamos si son 11 números los que quedaron, si no es el caso, ya devuelve falso
    if (cuit.length() != 11){
        return false;
    }
    //Convertimos la cadena que quedó en una matriz de caracteres
    String[] cuitArray = cuit.split("");
    //Inicializamos una matriz por la cual se multiplicarán cada uno de los dígitos
    Integer[] serie = {5, 4, 3, 2, 7, 6, 5, 4, 3, 2};
    //Creamos una variable auxiliar donde guardaremos los resultados del calculo del número validador
    Integer aux = 0;
    //Recorremos las matrices de forma simultanea, sumando los productos de la serie por el número en la misma posición
    for (int i=0; i<10; i++){
        aux += Integer.valueOf(cuitArray[i]) * serie[i];
    }
    //Hacemos como se especifica: 11 menos el resto de de la división de la suma de productos anterior por 11
    aux = 11 - (aux % 11);
    //Si el resultado anterior es 11 el código es 0
    if (aux == 11){
        aux = 0;
    }
    //Si el resultado anterior es 10 el código no tiene que validar, cosa que de todas formas pasa
    //en la siguiente comparación.
    //Devuelve verdadero si son iguales, falso si no lo son
    //(Esta forma esta dada para prevenir errores, se puede usar: return Integer.valueOf(cuitArray[10]) == aux;)
    return Objects.equals(Integer.valueOf(cuitArray[10]), aux);
}

Código Javascript[editar]

function validarCuit(cuit) {

	if(cuit.length != 11) {
		return false;
	}

	var acumulado 	= 0;
	var digitos 	= cuit.split("");
	var digito	= digitos.pop();

	for(var i = 0; i < digitos.length; i++) {
		acumulado += digitos[9 - i] * (2 + (i % 6));
	}

	var verif = 11 - (acumulado % 11);
	if(verif == 11) {
		verif = 0;
	}

	return digito == verif;
}

Código Python[editar]

def esCUITValida(cuit):
    cuit = str(cuit)
    cuit = cuit.replace("-", "")
    cuit = cuit.replace(" ", "")
    cuit = cuit.replace(".", "")
    if len(cuit) != 11:
        return False
    if not cuit.isdigit():
        return False
    base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
    aux = 0
    for i in xrange(10):
        aux += int(cuit[i]) * base[i]
    aux = 11 - (aux % 11)
    if aux == 11:
        aux = 0
    if int(cuit[10]) == aux:
        return True
    else:
        return False

Código PHP[editar]

public function validarCuit( $cuit ){
	$cuit = preg_replace( '/[^\d]/', '', (string) $cuit );
	if( strlen( $cuit ) != 11 ){
		return false;
	}
	$acumulado = 0;
	$digitos = str_split( $cuit );
	$digito = array_pop( $digitos );

	for( $i = 0; $i < count( $digitos ); $i++ ){
		$acumulado += $digitos[ 9 - $i ] * ( 2 + ( $i % 6 ) );
	}
	$verif = 11 - ( $acumulado % 11 );
	$verif = $verif == 11? 0 : $verif;

	return $digito == $verif;
}

Código PL/SQL[editar]

PROCEDURE CALCULAR_DV (i_cuit number) AS
    v_dv number;
    v_cuit number;
    begin 
        VALIDAR_CUIT(i_cuit,10);
        
        select mod(substr(i_cuit,1,1)*5+
            substr(i_cuit,2,1)*4+
            substr(i_cuit,3,1)*3+
            substr(i_cuit,4,1)*2+
            substr(i_cuit,5,1)*7+
            substr(i_cuit,6,1)*6+
            substr(i_cuit,7,1)*5+
            substr(i_cuit,8,1)*4+
            substr(i_cuit,9,1)*3+
            substr(i_cuit,10,1)*2,11) 
        into v_dv
        from dual;

    case when (11-v_dv) between 1 and 9 then
            v_cuit := i_cuit || (11-v_dv);
    when v_dv = 1 then
            CASE WHEN substr(i_cuit,1,2) = 27 then
                v_cuit := 23||substr(i_cuit,3,8)||4;
            WHEN substr(i_cuit,1,2) = 20 then
                v_cuit := 23||substr(i_cuit,3,8)||9;
            WHEN substr(i_cuit,1,2) = 24 then
                v_cuit := 23||substr(i_cuit,3,8)||3;
            WHEN substr(i_cuit,1,2) = 30 then
                v_cuit := 33||substr(i_cuit,3,8)||9;
            WHEN substr(i_cuit,1,2) = 34 then
                v_cuit := 33||substr(i_cuit,3,8)||3;
             ELSE
               dbms_output.put_line('El CUIT no se pudo calcular correctamente');
             END CASE;
    else
            v_cuit := i_cuit||0;
    end case;
        
    dbms_output.put_line('El CUIT completo con DV es: ' || v_cuit);
    
    EXCEPTION WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Error desconocido: '||SUBSTR(SQLERRM, 1, 200));
    END;
    
PROCEDURE VALIDAR_CUIT(i_cuit number,cant number) AS
BEGIN
    CASE WHEN length(i_cuit) <> cant THEN
        DBMS_OUTPUT.PUT_LINE('El cuit enviado se espera que tenga ' || cant || ' digitos');
    END CASE;
END;

Referencias[editar]

  1. «Art. 5, Ley 25.326 de Protección de Datos Personales». Consultado el 11 de septiembre de 2012. 
  2. Administración Federal de Ingresos Públicos. «Guía de Trámites de la Administración Federal de Ingresos Públicos». Consultado el 11 de septiembre de 2012. 

Enlaces externos[editar]