FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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 "; } } |
|
|
|