Skip to content

Instantly share code, notes, and snippets.

@aVolpe
Last active November 28, 2016 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aVolpe/fffbe6a9e9858c7e3546fb1d55782152 to your computer and use it in GitHub Desktop.
Save aVolpe/fffbe6a9e9858c7e3546fb1d55782152 to your computer and use it in GitHub Desktop.
Obtener el dígito verificador de la Secretaria de Estado de Tribulación del Paraguay
export default class DigitGenerator {
getDigitoVerificadorBase11 = (ruc) => {
return this.getDigitoVerificador(ruc, 11);
}
getDigitoVerificador = (ruc, base) => {
var k = 2;
var total = 0;
var valueOfZero = "0".charCodeAt(0);
var alRevez = this.invertirCadena(this.eliminarNoDigitos(ruc));
for (var i = 0; i < alRevez.length; i++) {
var numero = alRevez.charCodeAt(i);
total += (numero - valueOfZero) * k++;
if (k > base) k = 2;
}
var resto = total % base;
if (resto > 1) return base - resto;
else return 0;
}
invertirCadena = (cadena) => {
return cadena.split("").reverse().join("");
}
eliminarNoDigitos = (ruc) => {
var toRet = "";
for (var i = 0; i < ruc.length; i ++) {
// si no es caracter, lo converitmos a su valor numérico
if (isNaN(parseInt(ruc[i], 10))) {
toRet += ruc.charCodeAt(i);
} else {
toRet += ruc[i];
}
}
return toRet;
}
}
public class SetUtils {
public static int getDigitoVerificador(String ruc) {
return getDigitoVerificador(ruc, 11);
}
public static int getDigitoVerificador(String ruc, int base) {
int k = 2;
int total = 0;
String alRevez = invertirCadena(eliminarNoDigitos(ruc));
for (char numero : alRevez.toCharArray()) {
total += (numero - '0') * k++;
if (k > base)
k = 2;
}
int resto = total % base;
return resto > 1 ? base - resto : 0;
}
protected static String invertirCadena(String ruc) {
// si se dispone de apache commons se puede usar
// StringUtils.reverse(ruc);
return new StringBuilder(ruc).reverse().toString();
}
/**
* Elimina todos los no digitos de la cadena.
*
* @param ruc
* ruc con numeros, simbolos y letras.
* @return una versión del ruc consistente de solo digitos.
*/
protected static String eliminarNoDigitos(String ruc) {
String toRet = "";
for (char c : ruc.toCharArray()) {
if (Character.isDigit(c)) {
toRet += c;
} else {
toRet += (int) c;
}
}
return toRet;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment