Senhores,
estou tentando utilizar o Stella Boleto para gerar um boleto do Banco do Brasil. Quando utilizo carteira = 18, gera o código de barras adequadamente.
Quando uso carteira = 17, recebo a mensagem: “Erro na geração do código de barras. Número de digitos diferente de 44. Verifique todos os dados.”
Investigando um pouco, levantei essas informações
Para carteira 18 gera
001 // banco
9 // moeda
5244 // fator vencimento (calculo sobre a data de vencimento)
[telefone removido] // valor formatado
000000 // fixo - testa se carteria == 17 e mete isso
2101499 // num convenio formatado
[telefone removido] // nosso número substring 7
18 // carteira do emissor formatado
5 // dígito verificador mod 11 q ele injeta lá na posição 4
00195524400000055000000002101499[telefone removido]17
Para carteira 17
001 // banco
9 // moeda
5244 // fator vencimento (calculo sobre a data de vencimento)
[telefone removido] // valor formatado
000000 // fixo - testa se carteria == 17 e mete isso
2101499 // num convenio formatado
0043 // nosso número substring 7
18 // carteira do emissor formatado
5 // dígito verificador mod 11 q ele injeta lá na posição 4
00195524400000055000000002101499004317 //gera um erro pq deveria ter 44 dígitos e só tem 38, faltando um pedaço do “nosso numero”
o código que faz a montagem da String é o seguinte
} else if (emissor.getCarteira() == 17 || emissor.getCarteira() == 18) {
codigoDeBarras.append("000000");
codigoDeBarras.append(getNumeroConvenioDoEmissorFormatado(emissor));
codigoDeBarras.append(getNossoNumeroDoEmissorFormatado(emissor)
[b] .substring(7));[/b]
codigoDeBarras.append(boleto.getBanco()
.getCarteiraDoEmissorFormatado(emissor));
}
public String getNumeroConvenioDoEmissorFormatado(Emissor emissor) {
if (emissor.getNumeroConvenio() < 1000000) {
return String.format("%06d", emissor.getNumeroConvenio());
} else {
return String.format("%07d", emissor.getNumeroConvenio());
}
}
Ou seja, considera número de convênio de 11 ou 17 posições na hora de gerar, mas na hora de concatenar faz um substring a partir do 7. É isso mesmo?
Quando carteira 17, vai formatar um número de 11 posições e pegar a partir da sétima, gerando aquele número menor e quebrando o contrato (44 dígitos)
Não deveria considerar o tamanho na hora de fazer o substring?
Ou eu estou fazendo algo muito errado? =)
Qualquer ajuda é bem vinda!
Antecipadamente, agradeço a atenção.
Rodrigo Rosa