Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Generar Numero de CUIL (https://www.clubdelphi.com/foros/showthread.php?t=14680)

LucasArgentino 28-09-2004 13:47:35

Generar Numero de CUIL
 
Hola gente !!!
Hace un tiempo he pedido, si alguien conoce la funcion para generar el numero de CUIL, este numero es la clave de identificacion laboral en Argentina.

El formato es el siguiente, esta formado por el documento de la persona mas dos digitos por delante y un digito verificador por detra
xx25658974x
lo que yo necesitaria saber son las x.

Desde ya muchas gracias amigos y cualquier ayuda me sera de utilidad.
La funcion para verificar si este es correcto ya la poseo la que necesito es la que me genere estos valores

Lucas

Neftali [Germán.Estévez] 28-09-2004 15:52:20

Puedes obtener cómo se calcula desde ésta dirección:Trucomania
Tb desde ésta (para que tengas donde escoger ;) ): http://www.foboz.com.ar/modules.php?...rticle&sid=103

LucasArgentino 30-09-2004 17:28:21

Muchas gracias Neftali, pero lo que hace esta funcion es verificar si los digitos veridicadores son correctos, los dos primeros y el ultimo digito. No me crea los dos valores y el ultimo.

Agradezco tu interes. y gracias igual.

Neftali [Germán.Estévez] 30-09-2004 18:45:34

...hombre, dedícale un poco de tiempo a hojear los algoritmos. La mayoría de estos procedimientos lo que hacen para comprobar si un número es correcto (sea DNI, Cuenta corriente, CUIT,...) es:

1º Calcularlo
2º Luego comparar el calculado con el existente.

Éstos dos algoritmos no son una excepción, en la primera parte se calcula y en la última instrucción se compara; Extrae la parte que necesitas ;) .

LucasArgentino 04-10-2004 14:22:52

Ok resuelto
 
Hermano no es tan sencillo como parece....
pero siguiendo lo q tu llamas intuicion lo he podido realizar...

Gracias por tu interes y suerte....

Lucas

tronco026 31-03-2007 18:44:32

Tengo la solucion
 
Hola, infantes, si quieren un código pulenta pulenta, acá lo tienen:

Desde ya, no es DELPHI, es JAVA, pero funciona perfectamente, tanto para CUIL, como para CUIT, y no solo verifica, sino que tambien genera.

Llegado el caso, transcriban el código. El código java no es complicado

Espero les sea de utilidad.

SALUDOS A TODOS...



/**
* Esta clase implementa metodos para generar y validar un número de
* CUIT/CUIL (Codigo Unico de Identificación Tributaria/Código Unico de
* Identificación Laboral).
* En la práctica no se recomienda la utilización del metodo generar()
* ya q si bien se generará un CUIT/CUIL logicamente valido, esto no
* implica q el mismo corresponda a la persona en cuestion. El CUIT/CUIL
* lo otorgan la AFIP o el ANSES (www.anses.gov.ar/cuil.htm [1]).
*
* @author Luciano Astor - luciano@beatbang.com.ar [2]
* @version 1.0 - Mayo 2006
**/

public final class Cuit
{
private static int dniStc;
private static int xyStc;
private static int digitoStc;

/**
* Metodo estatico para generar un CUIT/CUIL.
*
* @param dniInt DNI como int
* @param xyChar Sexo de la persona como char.
* Masculino: m - Femenino: f - Para Personas Juridicas: cualquier otro caracter
*
* @return El CUIT/CUIL como String
**/

public static String generar(int dniInt, char xyChar)
{
if (xyChar == 'F' || xyChar == 'f')
xyStc = 27;
else
if (xyChar == 'M' || xyChar == 'm')
xyStc = 20;
else
xyStc = 30;

dniStc = dniInt;

calcular();
return formatear();
}

/**
* Metodo estatico para generar un CUIT/CUIL.
*
* @param dniInt DNI como int
* @param xyInt El prefijo del CUIT/CUIL como int
*
* @return El CUIT/CUIL como String
**/

public static String generar(int dniInt, int xyInt)
{
xyStc = xyInt;
dniStc = dniInt;
calcular();
return formatear();
}

/**
* Metodo estatico para validar un numero de CUIT/CUIL.

*
* @param cuit N° de CUIT/CUIL como String
*
* @return Boolean: true si el CUIT/CUIL es correcto, false en caso contrario
**/

public static boolean validar(String cuit)
{
String xyStr, dniStr, digitoStr;
int digitoTmp;
int n = cuit.lastIndexOf("-");
xyStr = cuit.substring(0, 2);
dniStr = cuit.substring(cuit.indexOf("-") + 1, n);
digitoStr = cuit.substring(n + 1, n + 2);
if (xyStr.length() != 2 || dniStr.length() > 8 || digitoStr.length() != 1)
return false;
try
{
xyStc = Integer.parseInt(xyStr);
dniStc = Integer.parseInt(dniStr);
digitoTmp = Integer.parseInt(digitoStr);
}
catch (NumberFormatException e)
{
return false;
}

if (xyStc != 20 && xyStc != 23 && xyStc != 24 && xyStc != 27 && xyStc != 30 && xyStc != 33 && xyStc != 34)
return false;

calcular();

if (digitoStc == digitoTmp && xyStc == Integer.parseInt(xyStr))
return true;

return false;

}

/**
* Metodo estatico que retorna el digito verificador de un CUIT/CUIL.
*
* @param xyInt El prefijo como int
* @param dniInt El DNI como int
*
* @return El digito como int. Si se modifico el prefijo (por 23 o 33)
* retorna 23x o 33x donde x es el digito
**/

public static int digito(int xyInt, int dniInt)
{
xyStc = xyInt;
dniStc = dniInt;
calcular();
if (xyInt == xyStc)
return digitoStc;
else
return (xyStc * 10 + digitoStc);
}

/**
* Metodo privado q da formato al CUIT como String
**/

private static String formatear()
{
return String.valueOf(xyStc) + "-" + completar(String.valueOf(dniStc)) + "-" + String.valueOf(digitoStc);

}

/**
* Metodo privado q completa con ceros el DNI para q quede con 8 digitos
**/

private static String completar(String dniStr)
{
int n = dniStr.length();

while (n < 8)
{
dniStr = "0" + dniStr;
n = dniStr.length();
}

return dniStr;
}

/**
* Metodo privado q calcula el CUIT
**/


private static void calcular()
{
long tmp1, tmp2;
long acum = 0;
int n = 2;
tmp1 = xyStc * 100000000L + dniStc;

for (int i = 0; i < 10; i++)
{
tmp2 = tmp1 / 10;
acum += (tmp1 - tmp2 * 10L) * n;
tmp1 = tmp2;
if (n < 7)
n++;
else
n = 2;
}

n = (int)(11 - acum % 11);

if (n == 10)
{
if (xyStc == 20 || xyStc == 27 || xyStc == 24)
xyStc = 23;
else
xyStc = 33;

/*No es necesario hacer la llamada recursiva a calcular(),
*se puede poner el digito en 9 si el prefijo original era
*23 o 33 o poner el dijito en 4 si el prefijo era 27*/

calcular();
}
else
{
if (n == 11)
digitoStc = 0;
else
digitoStc = n;
}
}

/**
* Metodo toString().
*
* @return Info acerca de la clase
**/

public String toString()
{
return "El principal objetivo de esta clase es implementar metodos" + "para generar y validar un numero de CUIT/CUIL.\n ";
}

}


La franja horaria es GMT +2. Ahora son las 20:15:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi