/**
   * @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;
  }