Last active
November 28, 2016 14:10
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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