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