Package br.com.caelum.stella.boleto.bancos

Source Code of br.com.caelum.stella.boleto.bancos.GeradorDeLinhaDigitavel

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;
  }
}
TOP

Related Classes of br.com.caelum.stella.boleto.bancos.GeradorDeLinhaDigitavel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.