397 lines
9.8 KiB
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
|
|
|
|
}
|
|
} |