DNI + Sexo => Cuilt

2,541 views
Skip to first unread message

jp.19...@gmail.com

unread,
Jan 29, 2018, 2:23:00 PM1/29/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Estimados. 

estoy buscando el algoritmo para generar aparitr de DNI + sexo el CUIL. 
Lo unico que he encontrado es wikipedia, pero tengo varios casos que el algoritmo me genera distinto de lo que aparece en AFIP. 

Hay alguna especificación oficial de como generarlo ? O algo alternativo a Wikipedia ? 

desde ya muchas gracias 

Walter Negro

unread,
Jan 29, 2018, 3:32:09 PM1/29/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
No hay algo oficial para generar, porque los únicos que lo pueden generar son los que tienen la base de datos.
Lo único que podemos hacer con el algorítmo es validar.

Cuando el cálculo del dígito verificador para un documento masculino genera un 10 u 11, se produce un overflow, en esos casos se cambian los 2 primeros digitos de 20 a 23 y lo mismo pasa con el femenino que pasa de 27 a 23.
Ahora seguramente te preguntaras de donde salen los 24.
El 24 supuestamente es repetición. No se donde se puede dar ese caso, pero el único que lo puede saber es el que tiene la base de datos, por eso es que no podemos calcular con seguridad el número.

Walter Negro

Flavio V.

unread,
Jan 29, 2018, 4:44:30 PM1/29/18
to pyaf...@googlegroups.com
Yo lo que implemente al momento para poder "emular" la funcionalidad que daba en servicio viejo de AFIP donde dado un DNI te devolvia los posibles CUIL/CUIT es armar una serie de casuisticas segun los prefijos conocidos.

Por ejemplo:

Se ingresa un numero de DNI
Se completa con ceros hasta los 8 caracteres.
Genero coleccion de varios numeros posibles:
27xxxxxxxx
20xxxxxxxx
30xxxxxxxx
23xxxxxxxx
24xxxxxxxx

Y algunos otros, no me acuerdo todos los prefijos.

Luego con el algoritmo averiguo el digito verificador y completo los numeros

27xxxxxxxxy
20xxxxxxxxy
30xxxxxxxxy
23xxxxxxxxy
24xxxxxxxxy

Y despues comienzo a hacer consultas al servicio de padron A4/A5, me guardo todas las respuestas y devuelvo las respondidas ok.

Claro, el sistema que usa mi viejo no es que esta facturando constantemente por lo cual esta forma de trabajar sirve, y hasta el momento no tuvo problemas.

Si lo que se ingresa es un CUIT o CUIL mejor, ahi la consulta es directa y una sola.

Hago notar que debo guardarme todas las respuestas porque puede haber mas de una en caso de DNIs viejos donde se usa el mismo numero para el Femenino y para el Masculino, si eso pasa mi sistema abre una ventana para que seleccione el correcto, lo cual en general no es muy dificil dado el nombre.

Eso es porque yo no pido el sexo antes de hacer la consulta, si pidiera el sexo entonces las opciones de busqueda se acotarian.

Creo que publique por algun lado de este foro el codigo que hace esto, sino no tengo drama en compartirlo.

Saludos
Flavio


--
Proyecto PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT:
http://www.pyafipws.com.ar/ - http://www.github.com/reingart/pyafipws - http://www.sistemasagiles.com.ar/
---
Has recibido este mensaje porque estás suscrito al grupo "PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a pyaf...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/pyafipws.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

jp.19...@gmail.com

unread,
Jan 30, 2018, 10:03:26 AM1/30/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Gracias por la respuesta Flavio, voy  a hacer eso mismo ! 
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.

Claudio Mucci

unread,
Jan 30, 2018, 10:30:03 AM1/30/18
to pyaf...@googlegroups.com
Hola Flavio
El código que mensionas es en php?
Te acordas del hilo?

Gracias y saludos

Enviado desde mi iPhone
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.

Flavio V.

unread,
Jan 30, 2018, 4:27:31 PM1/30/18
to pyaf...@googlegroups.com
No, yo lo arme todo en python.

Si lo necesitas lo busco y te lo paso.

Saludos
Flavio

Claudio Mucci

unread,
Jan 30, 2018, 7:36:37 PM1/30/18
to pyaf...@googlegroups.com
Gracias Flavio, pero lo hago directamente en php siguiendo tu concepto. Te agradezco nuevamente.
Saludos

Enviado desde mi iPhone
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.

Walter Negro

unread,
Feb 1, 2018, 8:29:59 AM2/1/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Flavio, es muy buena la forma de obtener el dato, pero tené en cuenta que el 30 es para personas jurídicas no para personas físicas con DNI.
A una persona que registra una sociedad (o sea va en representación de la sociedad o entidad jurídica que sea) le van a dar un número que sería extremadamente dificil que coincida con el DNI de por ejemplo el presidente o apoderado circunstancial.

Para el caso, existen CUIT que comienzan con 33 por lo mismo que existe el prefijo 23.


FE_2017

unread,
Feb 1, 2018, 6:21:57 PM2/1/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Hola 
Como menciona Walter

Si en Realidad No lo vas a Generar ..  Lo vas a ENCONTRAR
debes armar  Tipo Sexo + mas Doc + el digito.
haces un loop desde el 1 al 0 y le vas aplicando el control de digito
en el  momento que te de .en la primera instancia. (overflow) escapas de la
rutina y.. ese debe ser el CUIT

Tendras q evaluar por sexo  27 20 23 24  empresa 30 

Suerte


El lunes, 29 de enero de 2018, 16:23:00 (UTC-3), jp.19...@gmail.com escribió:

RICARDO BERMUDEZ

unread,
Feb 14, 2018, 5:46:34 PM2/14/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Hola a todos!!!;
No sé si lo que están buscando es para algo muy específico pero yo me manejo con una aplicación en mi celular que se llama "Cuiler" y la verdad siempre me respondió bien con los números. Nunca me falló.
Se consigue en la PlayStore y es gratis
Saludos y espero que les sirva


El lunes, 29 de enero de 2018, 16:23:00 (UTC-3), jp.19...@gmail.com escribió:

Esteban

unread,
Feb 15, 2018, 7:31:12 PM2/15/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Hola, para el que quiera le puedo compartir un ejemplo en php para que generar un CUIT partiendo de un DNI. Intenté adjuntar el ejemplo pero no me deja. Creen dos archivos, uno llamado index.php y el otro generarcuit.php A su vez verifiquen en el index.php la la inclusión de jq <script src="https://code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script> , esta directa, de lo contrario importenlo de un archivo fisico. Funciona con cualquier versión. Exitos!

Archivo index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>.::Generar CUIT::.</title> 
<script src="https://code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 
function Generar() { 
var doc = $( "#nro_documento" ).val () ; 
var sex = ( sexo.options[sexo.selectedIndex].value ) ; 
var cant_doc = $( "#nro_documento" ).val().length; 

/*verifico que haya seleccionado un sexo y completado el dni*/ 
if( doc == '' || sex == 0 ) 
$( "#result" ).html( '' ) ; 
$( "#error" ).html( '<center><font color="red" size=4>Campos vacios..!!</font></center>' ); 
else 
/* verifico la longitud del campo documento sea = 8*/ 
if( cant_doc == 8 ) 
/* verifico que solo se hayan ingresado numeros. Que el campo sea entero.*/ 
if (isNaN(doc)) 
$( "#error" ).html( '<center><font color="red" size=4>Documento debe ser solo numeros...!!</font></center>' ); 
else 

$.ajax({ 
type: 'GET', 
url: "generarcuit.php?dni="+doc+"&sexo="+sex, 
success: function(data){ 
$( "#result" ).html( "<center><font color='black' size=4>"+data+"</font></center>" ); 
}); 
else 
$( "#error" ).html( '<center><font color="red" size=4>Documento Incorrecto..!!</font></center>' ); 
</script> 
</head> 
<body> 
<div class="contenido"> 

<fieldset class="elfieldset"> 
<legend class="legend">Formulario</legend> 
<input type="text" size="50" class="textareauno" name="nro_documento" id="nro_documento" value="" placeholder="Nro de documento"/><br><br><br> 
<select name="sexo" id="sexo" class="textareauno"> 
<option value="0">Seleccione...</option> 
<option value="1">Masculino</option> 
<option value="2">Femenino</option> 
<option value="3">Sociedad</option> 
</select><br><br><br> 
<div id="error"></div> 
<input type="submit" name="mysubmit" value="Generar" class="submit" onclick="Generar()"/> 
<div id="result"></div> 
</fieldset> 
</div> 
</body> 
</html> 


Archivo generarcuit.php

<?php 

if(isset( $_GET['dni'] ) && isset( $_GET['sexo'] ) ) 
$dni=$_GET['dni']; 
$sexo=$_GET['sexo']; 

if( $sexo == 1 ) 
//si es masculino 
$Primero = '20'; 
else if( $sexo == 2 ) 
//si es femenino 
$Primero = '27'; 
else 
//si es sociedad 
$Primero = '30'; 

$multiplicadores = Array('3', '2', '7','6', '5', '4', '3', '2'); 
$calculo = (substr($Primero,0,1)*5)+(substr($Primero,1,1)*4); 

for($i=0;$i<8;$i++) { 
$calculo += substr($dni,$i,1) * $multiplicadores[$i]; 

$resto = ($calculo)%11; 

if( ( $sexo!='3' ) && ( $resto<=1 ) ){ 
if($resto==0){ 
$C = '0'; 
} else { 
if($sexo==1){ 
$C = '9'; 
} else { 
$C = '4'; 
$Primero = '23'; 
} else { 
$C = 11-$resto; 

echo $cuil_cuit = $Primero.$dni.$C;
?>

Flavio V.

unread,
Feb 15, 2018, 8:23:10 PM2/15/18
to pyaf...@googlegroups.com
Sumo al ejemplo el siguiente link:


Tiene info sobre cómo manejar los cuil y cuit para casos especiales que yo al menos desconocía.

--
Saludos
Flavio

Enviado desde equipo movil

--

Esteban

unread,
Feb 16, 2018, 8:12:12 AM2/16/18
to PyAfipWs Factura Electrónica Libre y temas relacionados AFIP ARBA ANMAT
Hola! siguiendo el hilo de temas, tengo una consulta específica: generé en PHP mediante SOAP con certificado y clave la consulta al padrón en sus versiones v4, v5 y v10 (el que quiera puedo aportarlo a la comunidad, la respuesta está formateada en un array al estilo json del tan apreciado método REST, no vigente por políticas de seguridad y ley de datos protección de datos). Cuestión que en el método getPersona hay una llamada a  <xs:element minOccurs="0" name="dependencia" type="tns:dependencia"/> pero NO me esta devolviendo la dependencia (oficina de AFIP) a la cual está asignado el contribuyente consultado por el método en la versión de consulta completa-> https://aws.afip.gov.ar/sr-padron/webservices/personaServiceA4?WSDL Claramente con el método REST antes lo devolvía, y ahora según este metodo de conexión SOAP lo tendría que esta devolviendo como indican en la documentación oficial, pero no lo muestra.

Debugueé el resto de las llamadas de datos, por ejemplo: <xs:element minOccurs="0" name="apellido" type="xs:string"/> o <xs:element minOccurs="0" name="tipoPersona" type="xs:string"/> y funciona correctamente el resultado de la respuesta, puedo formatear el orden de respuesta o dejar de consultar ciertos datos.

A alguien que tenga implementado este método de consulta a padrón le devuelve la dependencia?

<xs:complexType name="dependencia">
    <xs:sequence>
      <xs:element minOccurs="0" name="descripcionDependencia" type="xs:string"/>
      <xs:element minOccurs="0" name="idDependencia" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>

Muchas gracias desde ya.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a pyafipws+u...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages