From 4ce7421fc4d5616c570bc138d841c7ad06f0cd2b Mon Sep 17 00:00:00 2001 From: "rafael.henrique" Date: Thu, 10 May 2018 23:30:28 +0000 Subject: [PATCH] Banco do brasil git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/GeneradorBoletosCNAB/trunk@81763 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../ventaboletos/utils/FormataUtil.java | 66 +++++ .../ventaboletos/utils/NossoNumeroUtils.java | 277 ++++++++++++++++++ 2 files changed, 343 insertions(+) create mode 100644 src/com/rjconsultores/ventaboletos/utils/FormataUtil.java create mode 100644 src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java diff --git a/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java b/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java new file mode 100644 index 000000000..2b68c8d94 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/utils/FormataUtil.java @@ -0,0 +1,66 @@ +package com.rjconsultores.ventaboletos.utils; + +import java.text.SimpleDateFormat; +import java.util.Date; + +public class FormataUtil { + + public static String formatarValorPorTamanho(String value, int tamanho) { + + value = value == null ? "" : value; + + if(value.length() > tamanho){ + value = value.substring(0, tamanho); + } + + return value; + } + + public static String formatarValorPorTamanhoZeroEsquerda(String value, int tamanho) { + + value = value == null ? "" : value; + + if(value.length() > tamanho){ + value = value.substring(0, tamanho); + } + + while(value.length() < tamanho){ + value = "0" + value; + } + + return value; + } + + public static String formatarValorPorTamanhoZeroDireita(String value, int tamanho) { + + value = value == null ? "" : value; + + if(value.length() > tamanho){ + value = value.substring(0, tamanho); + } + + while(value.length() < tamanho){ + value = value + "0"; + } + + return value; + } + + public static Date formataData(Date data) { + + if(data == null){ + data = new Date(); + } + + return data; + } + + public static String formataDataToString(Date data, String defaultValue) { + + if(data == null){ + return defaultValue; + } + + return new SimpleDateFormat("ddMMyyyy").format(data); + } +} diff --git a/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java b/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java new file mode 100644 index 000000000..b9f7900a9 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java @@ -0,0 +1,277 @@ +package com.rjconsultores.ventaboletos.utils; + +import java.math.BigInteger; +import java.util.Date; + +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.time.DateUtils; + +import com.rjconsultores.ventaboletos.enuns.BancoLayout; + +public class NossoNumeroUtils { + + /** + * Devolve o nosso numero do Bradesco com o DV calculado (Tamanho 12)... + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String calcularNossonumeroBradesco(Integer numCarteira, BigInteger nossoNumero){ + + + return StringUtils.right("00000000000" + nossoNumero, 11) + dacBradesco(numCarteira, nossoNumero); + + } + + /** + * Devolve o nosso numero do Itau com o DV calculado (Tamanho 9)... + * @param codAgencia + * @param numConta + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String calcularNossoNumeroItau(Integer codAgencia, Integer numConta, Integer numCarteira, BigInteger nossoNumero){ + + + return StringUtils.right("00000000" + nossoNumero, 8) + dacItau(codAgencia, numConta, numCarteira, nossoNumero); + + } + + /** + * Devolve o nosso numero do BB com o DV calculado (Tamanho 20)... + * @param convenioBanco + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String calcularNossoNumeroBancoBrasil(Integer convenioBanco, Integer numCarteira, BigInteger nossoNumero){ + + int controllConvenioNossoNumero = 0; + int controllNossoNumero = 0; + boolean dvControll = Boolean.TRUE; + + if(convenioBanco < 10000){ + controllConvenioNossoNumero = 4; + controllNossoNumero = 7; + }else if(convenioBanco < 1000000){ + controllConvenioNossoNumero = 6; + controllNossoNumero = 5; + }else{ + controllConvenioNossoNumero = 7; + controllNossoNumero = 10; + dvControll = Boolean.FALSE; + } + + String nC = StringUtils.right("0000000" + convenioBanco, controllConvenioNossoNumero); + String nN = StringUtils.right("0000000000" + nossoNumero, controllNossoNumero); + + String base = nC + nN; + + return dvControll ? StringUtils.left(base + dacBB(base, numCarteira), 20) : base; + } + + /** + * Calcula do DV para o Bradesco + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String dacBradesco(Integer numCarteira, BigInteger nossoNumero){ + + + int multiplicadores[] = {2,7,6,5,4,3,2,7,6,5,4,3,2}; + int multiplicandos[] = new int[13]; + + String carteira = StringUtils.right("00" + numCarteira, 2); + String nNumero = StringUtils.right("00000000000" + nossoNumero, 11); + + String base = carteira + nNumero; + + for (int i = 0; i < multiplicandos.length; i++) { + + String d = base.charAt(i) + ""; + + multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i]; + } + + int dac = 0; + + for(Integer v : multiplicandos){ + + dac += v; + } + + dac = 11 - (dac % 11); + + return (dac == 10) ? "P" : dac + ""; + + } + + /** + * Calcula do DV para o Itau + * @param codAgencia + * @param numConta + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String dacItau(Integer codAgencia, Integer numConta, Integer numCarteira, BigInteger nossoNumero){ + + + int multiplicadores[] = {1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2}; + int multiplicandos[] = new int[20]; + + String agencia = StringUtils.right("0000" + codAgencia, 4); + String conta = StringUtils.right("00000" + numConta, 5); + String carteira = StringUtils.right("000" + numCarteira, 3); + String nNumero = StringUtils.right("00000000" + nossoNumero, 8); + + String base = agencia + conta + carteira + nNumero; + + for (int i = 0; i < multiplicandos.length; i++) { + + String d = base.charAt(i) + ""; + + multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i]; + } + + int dac = 0; + + for(Integer v : multiplicandos){ + + if(v < 10){ + dac += v; + }else{ + dac += 1 + (v - 10); + } + } + + dac = 10 - (dac % 10); + + + + return dac + ""; + } + + /** + * Calcula do DV para o Banco do Brasil + * @param nossoNumero + * @param numCarteira + * @return + */ + public static String dacBB(String nossoNumero, Integer numCarteira){ + + int multiplicador = 9; + + int soma = 0; + + for (int i = nossoNumero.length() - 1; i >= 0 ; i--) { + + int current = Integer.parseInt(nossoNumero.charAt(i) + ""); + + current = current * multiplicador; + soma = soma + current; + multiplicador--; + + if(multiplicador == 2){ + multiplicador = 9; + } + } + + int mod = soma % 11; + + if(mod == 10){ + return "X"; + } + + return mod + ""; + } + + + /** + * Calcula do DV para o Itau (Numero Documento) + * @param codAgencia + * @param numConta + * @param numCarteira + * @param nossoNumero + * @return + */ + public static String dvDocumentoItau(Integer numeroDoc){ + + + int multiplicadores[] = {1,2,1,2,1,2,1,2,1,2}; + int multiplicandos[] = new int[10]; + + String doc = StringUtils.right("0000000000" + numeroDoc, 10); + + String base = doc; + + for (int i = 0; i < multiplicandos.length; i++) { + + String d = base.charAt(i) + ""; + + multiplicandos[i] = Integer.valueOf(d) * multiplicadores[i]; + } + + int dac = 0; + + for(Integer v : multiplicandos){ + + if(v < 10){ + dac += v; + }else{ + dac += 1 + (v - 10); + } + } + + dac = 10 - (dac % 10); + + + + return dac + ""; + } + + public static boolean validaNossoNumero(String nossoNumero, BancoLayout bancoLayout){ + + if(BancoLayout.BRADESCO_400_Envio.equals(bancoLayout) && nossoNumero.length() == 12 ){ + return Boolean.TRUE; + } + + if(BancoLayout.ITAU_400_Envio.equals(bancoLayout) && nossoNumero.length() == 9 ){ + return Boolean.TRUE; + } + + if(BancoLayout.BB_240_Envio.equals(bancoLayout)){ + return Boolean.TRUE; + } + + return Boolean.FALSE; + } + + + public static void main(String[] args) { + + //System.out.println(calcularNossonumeroBradesco(19, new BigInteger("00166509652"))); + //System.out.println(calcularNossonumeroBradesco(19, new BigInteger("00000000001"))); + //System.out.println(calcularNossoNumeroItau(57, 72192, 109, new BigInteger("987123451"))); + //System.out.println(dvDocumentoItau(1108954)); + +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100000"))); +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100001"))); +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100002"))); +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100003"))); +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100004"))); +// System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100005"))); + + + System.out.println(calcularNossoNumeroBancoBrasil(490, 17, new BigInteger("100006"))); + System.out.println(calcularNossoNumeroBancoBrasil(88490, 17, new BigInteger("100007"))); + System.out.println(calcularNossoNumeroBancoBrasil(3088490, 17, new BigInteger("100005"))); + + Date ini = new Date(97, 9, 7); + Date end = new Date(); + System.out.println(((end.getTime() - ini.getTime()) / DateUtils.MILLIS_IN_DAY)); + + } +}