Welcome
27 Sep 2009 01:37
Tags: blog
This blog will be about things of my interest. I am mostly interested in software development, but if you find here many off-topic things you don't care about even in foreign languages, please ignore them kindly. I tag my entries so they should be easily filterable.
Comments: 0, Rating: 0
Como calcular el Codigo Verificador del RUC en Groovy o Java?
24 Sep 2009 03:25
En la pagina del SET hay unas funciones para calcular el digito verificador del RUC (GIOM):
[http://www.set.gov.py/pset/hgxpp001?6,18,273,O,S,0,PAG;CONC;287;4;D;370;1;PAG;MNU;E;103;5;MNU;,]
Los lenguajes listados son PL/SQL, Visual Basic y C. El mundo y Paraguay hablan más lenguajes. Porque yo trabajo normalmente con Java o Groovy yo he traducido los algoritmos en los quales lenguajes.
Quando estaba en el SET para pedir un RUC me fui al otro lado de la calle donde esta ubicado el departamento de la informatica del SET para ofrecer mis traduciones. Me daron un email para enviar mis datos que hice el 17 de Julio. Yo no sé porque todavia no he escuchado nada y no han publicado. Tal vez tienen algunos errores mis traducciones que todavía no he encontrado, en este caso pido amablemente sus correcciones.
En el caso que mis algoritmos son útil para alguien yo seria agradecido. Por favor usan el codigo libremente, pero sabiendo que viene sin ningun garantia ;-)
Groovy
int calcDigitoVerificador(String ruc, int basemax = 11) {
String numeroRuc = ruc.chars.collect {
it.isDigit() ? it : (int) it
}.join()
int k = 2
int total = 0
numeroRuc.reverse().chars.each {
k = k > basemax ? 2 : k
int numero_aux = it - 48
total += numero_aux * k++
}
int resto = total % 11
resto > 1 ? 11 - resto : 0
}
Java
int Pa_Calcular_Dv_11_A(String p_numero, int p_basemax) {
int v_total, v_resto, k, v_numero_aux, v_digit;
String v_numero_al = "";
for (int i = 0; i < p_numero.length(); i++) {
char c = p_numero.charAt(i);
if(Character.isDigit(c)) {
v_numero_al += c;
} else {
v_numero_al += (int) c;
}
}
k = 2;
v_total = 0;
for(int i = v_numero_al.length() - 1; i >= 0; i--) {
k = k > p_basemax ? 2 : k;
v_numero_aux = v_numero_al.charAt(i) - 48;
v_total += v_numero_aux * k++;
}
v_resto = v_total % 11;
v_digit = v_resto > 1 ? 11 - v_resto : 0;
return v_digit;
}
También yo tengo un programa para probar mis funciones con el cual yo he encontrado 5 errores en los 10 archivos publicado en la pagina "Listado de Equivalencias de RUC". Si alguien esta interesado también yo puedo publicar mis unit tests (come se traduce esto?) y un reporte de los resultados.
Comments: 0, Rating: 0





