AdmMono/GeneradorBoletosCNAB/src/com/rjconsultores/ventaboletos/utils/NossoNumeroUtils.java

397 lines
9.8 KiB
Java

package com.rjconsultores.ventaboletos.utils;
import java.math.BigInteger;
import org.apache.commons.lang.StringUtils;
import com.rjconsultores.ventaboletos.enuns.BancoLayout;
public class NossoNumeroUtils {
private static final String ZERO_7 = "0000000";
private static final String ZERO_8 = "00000000";
private static final String ZERO_9 = "000000000";
private static final String ZERO_10 = "0000000000";
private static final String ZERO_11 = "00000000000";
/**
* 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(ZERO_11 + 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(ZERO_8 + nossoNumero, 8) + dacItau(codAgencia, numConta, numCarteira, nossoNumero);
}
public static String calcularNossoNumeroSantander(BigInteger nossoNumero){
return StringUtils.right(ZERO_7 + nossoNumero, 7)+dacSantander( nossoNumero.toString() );
}
public static String calcularNossoNumeroSicoob(Integer numCooperativa, Integer codCliente, BigInteger nossoNumero){
return StringUtils.right(ZERO_7 + nossoNumero, 7)+dacSicoob(numCooperativa, codCliente, nossoNumero.toString() );
}
public static String calcularNossoNumeroMercantil(Integer agencia, BigInteger nossoNumero){
return StringUtils.right(ZERO_10 + nossoNumero, 10)+dacMercantil( agencia, nossoNumero );
}
public static String calcularNossoNumeroSafra(BigInteger nossoNumero){
return StringUtils.right(ZERO_9 + nossoNumero, 9)+dacSafra( nossoNumero );
}
/**
* Devolve o nosso numero do BB com o DV calculado (Tamanho 20)...
* @param convenioBanco
* @param numCarteira
* @param nossoNumero
* @return
*/
public static String calcularNossoNumeroBancoBrasil(Long 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(ZERO_7 + convenioBanco, controllConvenioNossoNumero);
String nN = StringUtils.right(ZERO_10 + 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(ZERO_11 + 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 == 11) ? "0" :(dac == 10) ? "P" : dac + "";
}
public static String dacSicoob(Integer numCooperativa, Integer codCliente, String nossoNumero){
int multiplicadores[] = {3,1,9,7,3,1,9,7,3,1,9,7,3,1,9,7,3,1,9,7,3};
int multiplicandos[] = new int[21];
String cooperativa = StringUtils.right("0000" + numCooperativa, 4);
String cliente = StringUtils.right(ZERO_10 + codCliente, 10);
String nNumero = StringUtils.right(ZERO_7 + nossoNumero, 7);
String base = cooperativa + cliente + 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 = dac % 11;
if( dac == 0 || dac == 1)
return "0";
return (11 - dac) + "";
}
public static String dacMercantil(Integer agencia, BigInteger nossoNumero){
int multiplicadores[] = {7,6,5,4,3,2,9,8,7,6,5,4,3,2};
String agenciaformatada = StringUtils.right("0000" + agencia, 4);
String nNumero = StringUtils.right(ZERO_11 + nossoNumero, 10);
String base = agenciaformatada + nNumero;
int soma = 0;
for (int i = 0; i < base.length(); i++) {
String d = base.charAt(i)+"";
soma = Integer.valueOf(d) * multiplicadores[i];
}
int mod = soma % 11;
if( mod == 0 || mod == 1 ) {
return "0";
}
return String.valueOf(11 - mod);
}
public static String dacSafra(BigInteger nossoNumero){
int[] multiplicadores = {2,1,2,1,2,1,2,1,2};
int[] multiplicandos = new int[20];
String base = StringUtils.right(ZERO_9 + nossoNumero, 9);
for (int i = 0; i < 9; 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 == 10 ? "0" : 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(ZERO_8 + 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 == 10 ? "0" : 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 + "";
}
public static String dacSantander(String nossoNumero){
int multiplicador = 2;
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 "1";
}else if( mod == 0 || mod == 1 ) {
return "0";
}
return String.valueOf(11 - 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(ZERO_10 + 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() == 13 ){
return Boolean.TRUE;
}
if(BancoLayout.ITAU_400_Envio.equals(bancoLayout) && nossoNumero.length() == 10 ){
return Boolean.TRUE;
}
if(BancoLayout.MERCANTIL_400_Envio.equals(bancoLayout) && nossoNumero.length() == 12 ){
return Boolean.TRUE;
}
if(BancoLayout.SANTANDER_400_Envio.equals(bancoLayout) && nossoNumero.length() == 9 ){
return Boolean.TRUE;
}
if(BancoLayout.SAFRA_400_Envio.equals(bancoLayout) && nossoNumero.length() == 10 ){
return Boolean.TRUE;
}
if(BancoLayout.BB_240_Envio.equals(bancoLayout) && (nossoNumero.length() == 13 || nossoNumero.length() == 17)){
return Boolean.TRUE;
}
if(BancoLayout.SICOOB_240_Envio.equals(bancoLayout) && nossoNumero.length() == 9 ){
return Boolean.TRUE;
}
if(BancoLayout.CAIXA_400_Envio.equals(bancoLayout) && ( nossoNumero.length() == 10 && nossoNumero.startsWith("3"))){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
public static void main(String[] args) {
System.out.println( calcularNossoNumeroSafra( new BigInteger("422979999") ));
System.out.println(dacItau(5435, 34787, 109, new BigInteger("81059"))); //codAgencia, numConta, numCarteira, nossoNumero
}
}