br.com.caelum.stella.boleto.bancos.GeradorDeLinhaDigitavel Maven / Gradle / Ivy
package br.com.caelum.stella.boleto.bancos;
import br.com.caelum.stella.boleto.Banco;
import br.com.caelum.stella.boleto.bancos.gerador.GeradorDeDigito;
/**
* Gera linha digitavel do boleto com base no codigo de barras.
*
* @author Rodrigo Turini
* @author Victor Harada
*
*/
public class GeradorDeLinhaDigitavel {
/**
* Gera a linha digitavel do boleto de acordo com normas
* da carta circular n. 2926 do banco central do Brasil.
* Disponível para consulta em caelum.stella.boleto.doc
*
* @param codigoDeBarras gerado pelo boleto
* @param banco banco para o qual estamos gerando o boleto.
* @return linha digitavel já formatada de acordo com padrao
*/
public String geraLinhaDigitavelPara(String codigoDeBarras, Banco banco) {
if (codigoDeBarras.length()!= 44){
throw new IllegalArgumentException("O código de barras" +
" precisa ter 44 digitos");
}
GeradorDeDigito dvGenerator = banco.getGeradorDeDigito();
StringBuilder builder = new StringBuilder();
builder.append(codigoDeBarras.substring(0, 3));
builder.append(codigoDeBarras.substring(3, 4));
builder.append(codigoDeBarras.substring(19, 24));
builder.append(dvGenerator.geraDigitoMod10(builder.toString()));
builder.append(codigoDeBarras.substring(24, 34));
builder.append(dvGenerator.geraDigitoMod10(builder.substring(10, 20)));
builder.append(codigoDeBarras.substring(34));
builder.append(dvGenerator.geraDigitoMod10(builder.substring(21, 31)));
builder.append(codigoDeBarras.substring(4, 5));
builder.append(codigoDeBarras.substring(5, 9));
builder.append(codigoDeBarras.substring(9, 19));
return formata(builder).toString();
}
private StringBuilder formata(StringBuilder linhaDigitavel) {
linhaDigitavel.insert(5, '.');
linhaDigitavel.insert(11, " ");
linhaDigitavel.insert(18, '.');
linhaDigitavel.insert(25, " ");
linhaDigitavel.insert(32, '.');
linhaDigitavel.insert(39, " ");
linhaDigitavel.insert(42, " ");
return linhaDigitavel;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy