Calcular el CUIL

Un poco de historia del CUIL – CUIT

Que es el DNI

(Según el Registro Nacional de Personas – RENAPER…)
El DNI es el Documento Nacional de Identidad que certifica en forma exclusiva la identidad de las personas, a partir de la base de datos que administra el Registro Nacional de las Personas. El DNI es el único instrumento que acredita la identidad de una persona.

¿Es único el DNI?

Explícitamente en ningún lado indica que es único, pero todos creemos que así lo es.
Luego de haber trabajado con bases de datos de la Argentina, me di cuenta que esto no es tan así.
Encontré una gran cantidad de personas que tienen su DNI duplicado. Es decir que hay dos personas en la Argentina con el mismo número.
Puede ser un poco complicado de entender al principio, pero tuve la suerte y/o la coincidencia de tener un compañero cercano con este “problema”. Su número de DNI era el mismo que de una chica. Gracias a él empecé a investigar y descubrí que es algo común (si es que se puede llamar así).

No es único el DNI

Aparentemente el ReNaPer debido a algún error entrego números duplicados.
La explicación más lógica: la distribución de los números depende de personas.. Y donde existe una persona… existe la posibilidad de equivocación…

Y nació el CUIL

Es por ello que (entre otros motivos)… para facilitar el trabajo de organismos oficiales (ANSES, AFIP), surgió el identificador del CUIL (Código Único de Identificación Laboral) – CUIT (Código único de Identificación Tributaría). :D

De esta manera, por más que hubiese un DNI duplicado el CUIL los diferenciaría, y no habría mas problemas…
Para ello se inventó un Algoritmo para calcular dicho número (CUIL-CUIT – Son los mismos números).

Generando el CUIL CUIT

CUIL / CUIT
CUIL/T: Son 11 números en total:
XY – 12345678 – Z
XY: Indican el tipo (Masculino, Femenino o una empresa)
12345678: Número de DNI
Z: Código Verificador

Algoritmo:
Se determina XY con las siguientes reglas
Masculino:20
Femenio:27
Empresa:30

Se multiplica XY 12345678 por un número de forma separada:

X * 5
Y * 4
1 * 3
2 * 2
3 * 7
4 * 6
5 * 5
6 * 4
7 * 3
8 * 2

Se suman dichos resultados. El resultado obtenido se divide por 11. De esa división se obtiene un Resto que determina Z
Si el resto es 0= Entoces Z=0 Si el resto es 1= Entonces se aplica la siguiente regla:
*Si es hombre: Z=9 y XY pasa a ser 23 *Si es mujer: Z=4 y XY pasa a ser 23
Caso contrario XY pasa a ser (11- Resto).

Ejemplo de Cálculo de CUIL CUIT:

Masculino DNI 12 345 678

1-Determinar el Tipo
XY es 20
Hacemos el cálculo
2 * 5=10
0 * 4=0
1 * 3=3
2 * 2=4
3 * 7=21
4 * 6=24
5 * 5=25
6 * 4=24
7 * 3=21
8 * 2=16
Realizamos la suma de (10+0+3+4+21+24+25+24+21+16)= 148
Dividimos por 11 para obtener Z (el código verificador
148/11=13,4545—>13 (Redondeo)
Obtenemos el resto de la división
148 – (13*11)=5
Determinamos Z
11-5= 6

Conclusión: CUIL-CUIT
20-12345678-6

Básicamente esta es la regla por la cuál se debería determinar el número de CUIL/T….
Y repito debería pues si bien lo genera este algoritmo, el impulsor del mismo es una persona. Es por ello que existen personas con número de CUIL que no se ajustan a esta reglas (o si en cierta manera).

Los errores más comunes son:

Por ejemplo a: 12345678
Se equivocan de sexo ( En ves de masculino le colocan F a la hora del cálculo)
Resultado: 27-12345678 – 0
Se equivocaron de número en el DNI
Resultado: 20 – 12346788 – 5
Y otras cosas extrañas que vi…

Aplicación para calcular y generar contancia

Para el cálculo del cuil y cuit puede ser de utilidad las siguientes aplicaciones:

Esta APP es para Android  y permite generar e imprimir la constancia:

Cuil – Generador – Aplicaciones en Google Play

Esta APP es para Windows con .NET Framework, y permite generar e imprimir la constancia:

http://maurobernal.com.ar/cuil/cuil.zip

55 comentarios
    • Mauro Bernal
      Mauro Bernal Dice:

      Muchas gracias. No existe una regla en caso de que exista duplicado el dni. Por experiencia cuando se repetía el dni eran siempre de sexos distintos por lo que resultaban siendo cuiles diferentes.

      Responder
      • Mauro Bernal
        Mauro Bernal Dice:

        Porque estamos en Argentina 😉
        Principalmente por una mala distribución de los rangos de dni en los registros civiles, la mala caligrafía por parte de un empleado. Antes de la era digital cuando surgió en 1968 el dni todo dependía de procesos y controles de empleados humanos propensos a cometer errores. Cosa que hasta 20 años después se siguió cometiendo!!!

        Responder
        • HUGO ANDRES FERRRAI
          HUGO ANDRES FERRRAI Dice:

          EXCELENTE RESPUESTA MAURO, a una recurrente anomalía local del factor humano no idóneo sumado a la falta de estandarización de métodos en entes sensibles. Gracias

          Responder
        • Jorge
          Jorge Dice:

          Buenos días. No se repiten para mismo sexo.
          La duplicidad de números se dan 1 ves para libreta cívica – una ves para libreta de enrolamiento, según sexo

          Responder
      • Yisus
        Yisus Dice:

        Porque antes los hombres tenían Libreta de enrolamiento y las mujeres Libreta cívica. Entonces una LE podía tener el mismo nro que una LC porque era para personas de diferentes géneros. Al unificar en DNI puede haber 2 DNI iguales, a mi vieja le pasó muchas veces, la confundían con un hombre que vive en la loma del tuje.
        Al diferenciar entre H o M el CUIL no tiene ese problema, 27 ó 23.

        Responder
  1. Hugo S
    Hugo S Dice:

    Buenas, muy bueno tu post. Creo que el problema de un mismo DNI para un hombre y una mujer tiene su origen en que antes existía Libreta de Enrolamiento y Libreta Cívica (una para hombres y la otra para mujeres). En consecuencia, había mismos números para cada libreta. Cuando unificaron a DNI, no quedó otra que repetir el número, e informar el sexo en dicho DNI. Saludos

    Responder
    • luis
      luis Dice:

      Excelente tu respuesta Hugo. Esa es la explicación. Hasta que se unificoóla documentación bajo DNI había LE con su numeración de corrido y LC idem. Como bien explicas, al unificarse bajo DNI existen (por ahora, porque nos vamos a ir muriendo) 2 números iguales para estos casos. Para esos casos está la aclaración que solicitan M o F cuando ingresamos el documento en dondevoto, por ej.

      Responder
      • Margarita
        Margarita Dice:

        Lo que manifiestan Hugo y Luis es correctisimo. Por eso las personas q tuvieron libreta de enrolamiento o libreta civica (hombre o mujer respectivamente) deberan observar la colocacion de M o F (masculino o femenino). Segun corresponda.

        Responder
        • Mauro Bernal
          Mauro Bernal Dice:

          En 1905 surge la libreta de enrolamiento (LE) solo para hombres con su propia numeración. En 1947 surge la libreta cívica (LC) solo para mujeres empezando de nuevo del 000.000.001 porque tenia su propia numeración. En 1968 se implementó el DNI empezando desde el 10.000.000 para los nacidos al 1951. Los anteriores se quedaron con el número de su documento original (LC o LE) y se les agregó la letra del sexo M o F ya que estaban repetidos.

          Responder
  2. Cesar
    Cesar Dice:

    Tenes un error. Donde dice “Caso contrario XY pasa a ser (11- Resto)”, creo que debería decir “Caso contrario Z pasa a ser (11- Resto)”
    El número verificador es el que se calcula como 11-Resto en ese caso, no los prefijos.
    Saludos.

    Responder
    • Estefania
      Estefania Dice:

      Creo que estás dentro de los casos de número de DNI duplicados. Tengo 2 casos cercanos, un DNI duplicado mismo sexo, el cual se lo arreglaron anteponiéndole un 24. También tengo otra conocida que con dni duplicado le antepusieron un 23

      Responder
  3. natalia
    natalia Dice:

    Hola, y en caso de personeria juridicas? tengo un caso de un consorcio, que el cuit no contiene el nº de dni del administrador . “30-59835406-1”. Como puede saber a que persona esta asociado?? gracias!!!

    Responder
    • Mauro Bernal
      Mauro Bernal Dice:

      En el boletín oficial figura la escritura de constitución y nombra los directores o socios. Este último por Google puedes buscarlo ya que está indexado. Sin embargo pueden tener un administrador que ese no figura.

      Responder
  4. Mariangeles
    Mariangeles Dice:

    Hay un error. Cuando el dígito verificador es 10, pero 10 es un número de 2 cifras, o sea, no es un dígito (dígito: nro del 0 al 9) se asigna el 23 y se calcula un nuevo dígito verificador.
    Saludos!!!!

    Responder
  5. mariangeles
    mariangeles Dice:

    POR EJEMPLO: ¿Cuál sería el dígito verificador del CUIL de Lio Messi, sabiendo que su DNI es 33016244?
    Comprobamos en nuestro programa que el dígito verificador es 10, pero 10 es un número de 2 cifras, o sea, no es un dígito (dígito: nro del 0 al 9).
    Se completa el procedimiento reasignando el identificador de género 23, en lugar de 20 y se procede a calcular un nuevo dígito.
    En este caso verificamos que el CUIL de Messi es 23-33016244-9

    Responder
  6. melora
    melora Dice:

    Hola, muy bueno el articulo. Mi duda al respecto es como se calcula para un DNI de solo un digito. Por Ejemplo: 1.234.567. A la hora de multiplicar cada numero por separado, delante del primer digito del DNI se antepone un 0 para lograr multiplicar por la misma secuencia (2345672345? antes mencionada? Graciass

    Responder
  7. Santiago Urenda
    Santiago Urenda Dice:

    Hola, muy bueno tu post, lo estoy usando para guiarme con un ejercicio de programación, pero tengo una duda, si soy una empresa y el resto de la división es 1, cuanto vale Z? Muchas gracias.

    Responder
    • Mauro Bernal
      Mauro Bernal Dice:

      Por supuesto que no. Ya estás dada de alta en los sistemas impositivos y bancarios con tu número actual.
      El algoritmo fue creado para identificar cómo una persona única, y a pesar del error de usar el 20 en vez del 27, ya se registró tu cuil esta manera. Seguramente cada vez qué haces un trámite te deben volver a preguntar si es correcto el 20, y no el 27. Salvo eso si ya en Anses y Afip figura así debes mantenerlo. Sin embargo me toca ver tu caso muchas veces, y los sistemas luego de elegir el género autocompleta el cuil, y nos ha presentado errores ya que luego debemos corregirlo.

      Responder
  8. Kike
    Kike Dice:

    Buenas. Estoy intentando generar un script en php con este calculo, pero no se como deberia actuar cuando el dni tiene 7 digitos, por ejemplo mi viejo. Debo completarlo con 0 a la izquierda cuando hago el calculo ?

    Gracias

    Responder
  9. Vanesa
    Vanesa Dice:

    Hola Mauro!
    Ahora con los cambios de genero (año 2021) para la inclusividad de los generos no binarios, sabes si los calculos son los mismos? Se tomaran los sexos de nacimiento para hacer el calculo del cuil?

    Muchas gracias!

    Responder
    • Mauro Bernal
      Mauro Bernal Dice:

      Por lo último que tenia entendido sera al azar, por lo que no tendremos una fórmula para recrearlo. Sin embargo este depende 100% de Anses, que a diferencia de Afip siempre van muy retrasados tecnológicamente por lo que deducimos que tampoco habra un WS para consultar el cuil mediante el DNI. Asi que por ahora nos estamos haciendo la idea que en nuestros sistemas deberemos pedir siempre el cuil, y ya no podremos generarlo a partir del dni y genero como lo hacíamos antes.
      Esto ocurre cuando soluciones parciales son realizadas para quedar bien con una parte y no pensar en el todo.

      Responder
  10. Laura
    Laura Dice:

    Hola. Excelente tu post. Pero te faltó algo en la aplicación de la regla cuando el resto es 1 (uno):
    *Si es hombre: Z=9 y XY pasa a ser 23
    *Si es mujer: Z=4 y XY pasa a ser 23
    –> *Si es empresa: Z=9 y XY pasa a ser 33 <–
    Espero sirva para todos. Muchas gracias por tu aporte.

    Responder
  11. Luis Gonzalo Diaz Miret
    Luis Gonzalo Diaz Miret Dice:

    Si quieren publicarlo solo pongan el Tag de mi aporte, #DiazMiret

    En A1 ponemos el DNI y en B1 ponemos M para Mujer, V para Varon, E para empresa.
    Esta es la formula que nos devuelve el CUIL/CUIT
    Se podria mejorar mas

    =SI((RESIDUO(SUMA(
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));1;1)*5;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));2;1)*4;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));3;1)*3;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));4;1)*2;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));5;1)*7;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));6;1)*6;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));7;1)*5;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));8;1)*4;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));9;1)*3;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));10;1)*2;);11))=1;
    CONCATENAR(“23″;A1;SI(B1=”V”;”9″;”4″));
    CONCATENAR((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));11-(REDONDEAR(RESIDUO(SUMA(
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));1;1)*5;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));2;1)*4;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));3;1)*3;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));4;1)*2;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));5;1)*7;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));6;1)*6;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));7;1)*5;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));8;1)*4;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));9;1)*3;
    EXTRAE((CONCATENAR((SI(B1=”V”;20;SI(B1=”M”;27;30)));A1));10;1)*2;);11);2))))

    Responder
  12. Alejandro
    Alejandro Dice:

    les dejo un código en Python al cual deberán ajustar a su entorno, donde aplico el algoritmo aquí propuesto.
    ”’
    Formula para calcular el Nº de CUIT | CUIL
    El CUIL | CUIT consta de 11 números. Los 10 primeros constituyen el código de identificación y el último, el dígito de verificación.(XX-12345678-Y)

    XX corresponde al tipo de persona: Físicas (Hombres, Mujeres) o Jurídicas:

    27 es para mujeres
    20 es para hombres
    23 puede ser ambos (se usa cuando hay otro número igual)
    Si el resto es 0 entoces Z = 0. Si el resto es 1 entonces se aplica la siguiente regla:
    Si es hombre: Z = 9 y XY pasa a ser 23
    Si es mujer: Z = 4 y XY pasa a ser 23
    Caso contrario XY pasa a ser (11- Resto).
    30 empresas

    12345678 es el número del DNI

    Y : Código verificador, que se obtiene después de seguir estos pasos:

    A cada uno de los 10 dígitos que conocemos, se multiplica por: 5, 4, 3, 2, 7, 6, 5, 4, 3, 2 respectivamente

    Se suman los valores obtenidos, el resultado se divide por 11, y del resultado se toma el primer decimal. Ese primer decimal se resta a 11 y el resultado es el numero verificador.

    EJEMPLO:
    ——-
    DNI 12.345.678 Masculino

    2 0 1 2 3 4 5 6 7 8
    x
    5 4 3 2 7 6 5 4 3 2
    ————————————————————
    10+0+3+4+21+24+25+24+21+16= 148

    148 dividido 11 = 5 (obtengo el resto R = 5)
    11-5 = 6

    Entonces, el CUIL | CUIT es 20-12345678-6

    FUENTE DE CONSULTA: https://maurobernal.com.ar/cuil/calcular-el-cuil/

    ”’
    import sys
    import os

    # Obtener la ruta del directorio actual del script
    script_dir = os.getcwd()

    # Obtener la ruta del directorio ‘modulos’ y agregarlo a sys.path
    modulos_dir = os.path.join(script_dir, ‘modulos’)
    sys.path.append(modulos_dir)

    # Ahora puedes importar el módulo ‘funciones’
    from funciones import clscr,is_number,espacios

    def imprimoCUIL(CuilAUX, sexo):
    Vector = CuilAUX
    serie = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
    DigitVerificador = lambda x: 9 if x == ‘1’ else 4

    Vector = list(zip(Vector,serie))
    Vector = sum(x * y for x,y in Vector)

    # Calculo el resto
    DV = Vector % 11

    if DV == 0:
    CuilAUX.append(DV)
    return(CuilAUX)
    elif DV == 1:
    CuilAUX[1] = 3
    CuilAUX.append(DigitVerificador(sexo))
    return(CuilAUX)
    else:
    DV = 11 – DV
    CuilAUX.append(DV)
    return(CuilAUX)
    def main():
    dni = “”

    cuil = []

    isok = False

    while not isok:
    clscr()
    dni = input(“Ingrese DNI > “)
    if len(dni.strip()) “)
    if len(hom.strip()) == 1:
    isok = is_number(hom)
    else:
    input(f”las Opciones son 1 o 2 >>”)

    homujer = lambda x: ‘Hombre’ if x == ‘1’ else ‘Mujer’

    dni = f”{int(dni):08}” # COMPLETO CON CEROS (0) A LA IZQUIERDA

    clscr()
    Titulo = “Calculo prefijo y dígito verificador CUIL/Cuit”
    print(Titulo)
    print(espacios(Caracter=’-‘,nLineas=len(Titulo)))
    print()

    print(f’DNI INGRESADO: {dni}’)
    print(f’OPCION…….: ({hom}) {homujer(hom)}’)

    if hom == ‘1’:
    cuil.extend([2,0])
    cuil.extend(int(n) for n in list(dni))
    cuil = imprimoCUIL(cuil, hom)
    elif hom == ‘2’:
    cuil.extend([2,7])
    cuil.extend(int(n) for n in list(dni))
    cuil = imprimoCUIL(cuil, hom)
    elif hom == ‘3’:
    cuil.extend([3,0])
    cuil.extend(int(n) for n in list(dni))

    print(f”Cuil………: {”.join(map(str,cuil[:2]))}-{”.join(map(str,cuil[2:10]))}-{str(cuil[10])}”)

    print()
    print(espacios(Caracter=’-‘, nLineas=len(Titulo)))
    print()

    if __name__ == “__main__”:
    main()

    Responder

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.