package br.com.caelum.stella.boleto.bancos.gerador; import br.com.caelum.stella.DigitoPara; public class GeradorDeDigitoPadrao implements GeradorDeDigito { private static final long serialVersionUID = 1L; @Override public int geraDigitoMod11(String codigoDeBarras) { return geraDigitoMod(codigoDeBarras, 2, 9, 11); } @Override public int geraDigitoMod(String codigoDeBarras, int inicio, int fim, int numMOD) { return Integer.valueOf(new DigitoPara(codigoDeBarras) .comMultiplicadoresDeAte(inicio, fim) .complementarAoModulo() .trocandoPorSeEncontrar("1", 0, 1, 10, 11) .mod(numMOD) .calcula()); } @Override public int geraDigitoMod10(String campo) { return Integer.valueOf(new DigitoPara(campo).comMultiplicadores(2, 1) .somandoIndividualmente().trocandoPorSeEncontrar("0", 10) .complementarAoModulo().mod(10).calcula()); } @Override public int geraDigitoBloco1(String bloco) { return geraDigitoMod10(bloco); } @Override public int geraDigitoBloco2(String bloco) { return geraDigitoMod10(bloco); } @Override public int geraDigitoBloco3(String bloco) { return geraDigitoMod10(bloco); } @Override public int geraDigitoMod11AceitandoRestoZero(String codigoDeBarras) { return geraDigitoModAceitandoRestoZero(codigoDeBarras, 2, 9, 11); } @Override public int geraDigitoModAceitandoRestoZero(String codigoDeBarras, int inicio, int fim, int numMod) { return Integer.valueOf(new DigitoPara(codigoDeBarras) .comMultiplicadoresDeAte(inicio, fim) .complementarAoModulo() .trocandoPorSeEncontrar("0", 0, 10, 11) .mod(numMod) .calcula()); } }