/** * @see * @since 0.3 */ @Override public int calcule(String numero) throws IllegalArgumentException { int dv = 0; int resto = 0; if (StringUtils.isNotBlank(numero) && StringUtils.isNumeric(numero) && (numero.length() == TAMANHO_SEM_DV)) { // Realizando o cálculo do dígito verificador. resto = modulo.calcule(numero); if (modulo.getMod() == TipoDeModulo.MODULO11) { // Seguindo as especificações da FEBRABAN, caso o resto seja // (0), (1) ou (10), será atribuído (1) ao digito verificador. if ((resto == 0) || (resto == 1) || (resto == 10)) dv = 1; // Caso contrário, dv = 11 - resto. else dv = modulo.valor() - resto; } else if (modulo.getMod() == TipoDeModulo.MODULO10) { // Seguindo as especificações da FEBRABAN, caso o resto seja // (0) ou (10), será atribuido o valor zero. if ((resto == 0) || (resto == 10)) dv = 0; // Caso contrário, dv = 10 - resto. else dv = modulo.valor() - resto; } } else { throw new IllegalArgumentException( "O código de barras " + "[ " + numero + " ] deve conter apenas números e " + TAMANHO_SEM_DV + " caracteres."); } return dv; }
/** * Método auxiliar para o cálculo do dígito verificador. * * <p>Calcula os dígitos separadamente. * * @param numero - número a partir do qual será extraído o dígito verificador. * @return Um número que faz parte de um dígito verificador. * @throws IllegalArgumentException caso o número não esteja no formatador desejável. * @since Vallia 1.0 */ private int calculeDigito(String numero) throws IllegalArgumentException { int dv = 0; int resto = 0; resto = Modulo.calculeMod11(numero, LIMITE_MINIMO, LIMITE_MAXIMO); if (resto >= 2) { dv = TipoDeModulo.MODULO11.valor() - resto; } return dv; }
/** * Calcula o dígito verificador para código de compensação passado. * * @param numero * @return int digito * @since 0.2 * @see br.com.jrimum.vallia.digitoverificador.AbstractDigitoVerificador#calcule(long) */ @Override public int calcule(long numero) { int dv = -1; if (!isCodigoValido(numero)) { throw new IllegalArgumentException(MSG); } int soma = Modulo.calculeSomaSequencialMod11(String.valueOf(numero), 2, 9); soma *= 10; dv = soma % 11; dv = (dv == 10) ? 0 : dv; return dv; }
@Override public Boolean visit(Modulo<T> pModulo, MemoryLocation pVarName) { return pModulo.getNumerator().accept(this, pVarName) || pModulo.getDenominator().accept(this, pVarName); }