From 1eb97bf0eb86e079fe04a5889934899060826bc2 Mon Sep 17 00:00:00 2001 From: Victor Vilella Date: Wed, 25 Sep 2024 16:26:20 -0300 Subject: [PATCH 1/3] =?UTF-8?q?D=C3=ADgito=20do=20BTG=20Pactual=20corrigid?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BoletoNetCore/Banco/BTGPactual/BancoBTGPactual.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BoletoNetCore/Banco/BTGPactual/BancoBTGPactual.cs b/BoletoNetCore/Banco/BTGPactual/BancoBTGPactual.cs index c7bc57a..267f532 100644 --- a/BoletoNetCore/Banco/BTGPactual/BancoBTGPactual.cs +++ b/BoletoNetCore/Banco/BTGPactual/BancoBTGPactual.cs @@ -11,7 +11,7 @@ public BancoBTGPactual() { Codigo = 208; Nome = "BTG Pactual"; - Digito = "2"; + Digito = "1"; IdsRetornoCnab400RegistroDetalhe = new List { "1" }; RemoveAcentosArquivoRemessa = true; } From 9210297e8838bd9554ad5dde89c8b50c9c416b46 Mon Sep 17 00:00:00 2001 From: Victor Vilella Date: Wed, 25 Sep 2024 16:26:52 -0300 Subject: [PATCH 2/3] Calculo digito verificador do BTG Pactual --- BoletoNetCore/Extensions/StringExtensions.cs | 47 ++++++++++++-------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/BoletoNetCore/Extensions/StringExtensions.cs b/BoletoNetCore/Extensions/StringExtensions.cs index 45d85ba..13c980a 100644 --- a/BoletoNetCore/Extensions/StringExtensions.cs +++ b/BoletoNetCore/Extensions/StringExtensions.cs @@ -216,33 +216,44 @@ public static string CalcularDVBancoInter(this string texto) return digitoFinal.ToString(); } - public static string CalcularDVBancoBTGPactual(this string texto) + public static string CalcularDVBancoBTGPactual(this string nossoNumero) { - // Multiplicadores (pesos) de 2 a 9, repetidos da direita para a esquerda - int[] pesos = { 2, 3, 4, 5, 6, 7, 8, 9 }; - int soma = 0; - int pesoIndex = 0; + var soma = 0; + var multiplicador = 2; - // Percorre os dígitos do "Nosso Número" da direita para a esquerda - for (int i = texto.Length - 1; i >= 0; i--) + // Percorrer o número de trás para frente + for (int i = nossoNumero.Length - 1; i >= 0; i--) { - // Pega o dígito atual - int digito = int.Parse(texto[i].ToString()); - - // Multiplica o dígito pelo peso correspondente - soma += digito * pesos[pesoIndex]; + // Multiplicar cada dígito pela sequência crescente de 2 a 9 + int numero = int.Parse(nossoNumero[i].ToString()); + soma += numero * multiplicador; - // Avança no array de pesos (recomeça do início se necessário) - pesoIndex = (pesoIndex + 1) % pesos.Length; + // Atualizar o multiplicador (2 a 9 e depois volta para 2) + multiplicador++; + if (multiplicador > 9) + { + multiplicador = 2; + } } - var resto = soma % 11; - + // Aplicar o Módulo 11 + int resto = soma % 11; + int digitoVerificador; + if (resto == 0 || resto == 1) { - return "0"; + digitoVerificador = 1; // Regra para evitar dígito zero } - return (11 - resto).ToString(); + else if (resto == 10) + { + digitoVerificador = 1; // Também pode ser 1, dependendo da regra do banco + } + else + { + digitoVerificador = 11 - resto; + } + + return digitoVerificador.ToString(); } } From d189534cb38d760cd48f2a8a6046afc56466ca0a Mon Sep 17 00:00:00 2001 From: Victor Vilella Date: Wed, 25 Sep 2024 16:27:19 -0300 Subject: [PATCH 3/3] =?UTF-8?q?Corre=C3=A7=C3=A3o=20Nosso=20numero=20e=20C?= =?UTF-8?q?ampo=20livre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Carteiras/BancoBTGPactualCarteira01.cs | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/BoletoNetCore/Banco/BTGPactual/Carteiras/BancoBTGPactualCarteira01.cs b/BoletoNetCore/Banco/BTGPactual/Carteiras/BancoBTGPactualCarteira01.cs index 65a2941..153ca0b 100644 --- a/BoletoNetCore/Banco/BTGPactual/Carteiras/BancoBTGPactualCarteira01.cs +++ b/BoletoNetCore/Banco/BTGPactual/Carteiras/BancoBTGPactualCarteira01.cs @@ -18,9 +18,10 @@ public void FormataNossoNumero(Boleto boleto) if (string.IsNullOrWhiteSpace(boleto.NossoNumero)) throw new Exception("Nosso Número não informado."); - // Nosso número não pode ter mais de 8 dígitos - if (boleto.NossoNumero.Length > 8) - throw new Exception($"Nosso Número ({boleto.NossoNumero}) deve conter 8 dígitos."); + // Nosso número não pode ter mais de 11 dígitos + const int tamanhoMaximoNossoNumero = 11; + if (boleto.NossoNumero.Length > tamanhoMaximoNossoNumero) + throw new Exception($"Nosso Número ({boleto.NossoNumero}) deve conter {tamanhoMaximoNossoNumero} dígitos."); var contaBancaria = boleto.Banco.Beneficiario.ContaBancaria; @@ -30,22 +31,19 @@ public void FormataNossoNumero(Boleto boleto) if (contaBancaria.Agencia.Length != 4) throw new NotImplementedException($"Não foi possível formatar o campo livre: Numero de Agencia ({contaBancaria.Agencia}) não possui 4 dígitos."); - boleto.NossoNumero = boleto.NossoNumero.PadLeft(8, '0'); - boleto.NossoNumeroDV = (boleto.Banco.Beneficiario.ContaBancaria.Agencia + boleto.Banco.Beneficiario.ContaBancaria.Conta + boleto.Carteira + boleto.NossoNumero).CalcularDVBancoBTGPactual(); - boleto.NossoNumeroFormatado = $"{boleto.Carteira}/{boleto.NossoNumero}-{boleto.NossoNumeroDV}"; + boleto.NossoNumero = boleto.NossoNumero.PadLeft(tamanhoMaximoNossoNumero, '0'); + boleto.NossoNumeroDV = (boleto.NossoNumero).CalcularDVBancoBTGPactual(); + boleto.NossoNumeroFormatado = $"{boleto.Carteira.PadLeft(3, '0')}/{boleto.NossoNumero.PadLeft(10, '0')}-{boleto.NossoNumeroDV}"; } public string FormataCodigoBarraCampoLivre(Boleto boleto) { return - $"00" + - $"{boleto.Carteira}" + - $"{boleto.NossoNumero}" + - $"{boleto.NossoNumeroDV}" + $"{boleto.Banco.Beneficiario.ContaBancaria.Agencia}" + - $"{boleto.Banco.Beneficiario.ContaBancaria.Conta}" + - $"{boleto.Banco.Beneficiario.ContaBancaria.DigitoConta}" + - $""; + $"{Convert.ToInt32(boleto.Carteira).ToString().PadLeft(2, '0')}" + + $"{boleto.NossoNumero}" + + $"{boleto.Banco.Beneficiario.ContaBancaria.Conta.Substring(boleto.Banco.Beneficiario.ContaBancaria.Conta.Length - 7)}" + + $"0"; } } } \ No newline at end of file