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).
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:
Que te da el cáclulo para 39818408. Me valida con 20 y con 23
Gracias por el artículo, muy didáctico. Me surgen las siguientes dudas: cuando dos personas tienen el mismo DNI, ¿cómo se generan dos CUIL distintos? ¿Cómo se decide a quién le toca el que se deriva del DNI?
Gracias, un saludo.
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.
No sabía que se repetían los DNI, es eso posible ? Por qué ⁉️
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!!!
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
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
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.
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
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.
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.
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.
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.
Buenas. Gracias por la corrección. Este post lo armé hace ya más de 10 años pero sigue vigente !!!
Tengo una duda…mi Cuit comienza con 23, ¿Qué sucedió?
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
Jeje
Si el prefijo fue la solución con un dígito verificador.
Es 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). Ahí se asigna el 23 y se calcula un nuevo dígito verificador
Excelente post me sirvio mucho! Ya lo implemente en Python. Saludos desde Tucumán, gracias
Hola como sulucionaste los dni repetidos ?
Para eso existe el cuil. En algunos sistemas como Afip se almacena una clave combinada de genero+ dni.
Pero existen dni repetidos y eso no va a cambiar.
Excelente post me sirvio mucho! Ya lo implemente en Python. Saludos desde Tucumán, gracias
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!!!
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.
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!!!!
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
Muy bueno!!!
Hola, te consulto mi dni es 38.194.860 como puedo saber mi cuil xq en Internet me da invalido. Necesito ayuda por favor
La formula da como resultado: 23-38194860-9
Sin embargo alguna vez tiene que haber sido generado por Anses. Puede darse que si bien ese el que corresponda desde Anses no lo hayan habilitado o generado uno diferente.
Lo ideal es que lo verifique desde aquí:
Consulta de Cuilt ANSES
hola mi hijo es maculino y empieza con 27 por que sucede esto? o es error humano?
Si un error humano.
Hola! Soy mujer y mi cuil empieza con 20!! Debo cambiarlo?
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
Se toma como 0 el digito faltante.
Por qué se multiplica por el número 5432765432 ?
qué significa este número?
Este tipo de algoritmo se ha usado desde hace mucho tiempo. El porque se eligen esos números es al azar. Si ves el caso del algoritmo del CBU verás que es igual, sin embargo el arreglo elegido para multiplicar es diferente: 71397139…
Te dejo los links para que lo veas:
Como se calcula el CBU
Como se calcula el CBU en TSQL Sql Server
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.
Soy mujer y mi cuil empieza con 20!! Debo cambiarlo?
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.
No puedo ingresar a mi mamá en el CIDI porque me dice que su cuil es invalido Su DNI es 7.351345. Como puedo hacer?
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
Es correcto. Debes completar con 0 (ceros) a la izquierda.
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!
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.
Gracias Mauro, la verdad es una macana que no usen un algoritmo para la nuevo, y que no este mas el web service de la afip.
Me podras decir, para los casos donde redondeamos el Z, y nos queda mayor que la sumatoria, quedando el resto en negativo, como se realizaria? Por ejemplo mi dni 36256589 me da 195/11=17,72 redondeado da 18
resto = 195 – (11*18) = -3
Probe en usar el valor absoluto, pero no me da el codigo verificador correcto.
Gracias!
La sumatoria da 195
El resto da 8
Entonces el digito verificador es 11-8=3
El redondeo es un redondeo hacia abajo, 17.72 se redondea a 17.
Hola!!! Mi cuil empieza con 20 soy mujer..
Voy a viajar en avión por primera vez me traerá algún problema??
No para nada.
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.
Hola Laura,
como quedaría entonces?
Saludos.
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))))
Hola Mauro, me podrías ayudar no puedo obtener mi cuil. Mi dni es 96177045
Muy buen post! Super útil 🙂
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()