/**
   * @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;
  }
Exemple #2
0
  /**
   * 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);
 }