Erro no calculo do DV do campo Nosso Número, Santander

Feb 3, 2009 at 2:51 PM
Edited Feb 3, 2009 at 2:52 PM
Prezados,

Estava verificando o calculo para o DV do campo nosso número do boleto santander e aparentemente não corresponde com a documentação.

Na documentação consta o seguinte:

Multiplicar da direita para a esquerda, de 2 até 9, até o final do número, reiniciando em 2, se necessário.

Dividir o total da soma por onze. Assim sendo, se o resto igual a 10 (dez) o digito será 1 (um), se o resto igual a 1 (um) ou 0 (zero), o digito será 0 (zero).

Qualquer resto diferente de 0 (zero) , 1 (um) e 10 (dez), subtrair o resto de 11 para obter o digito.

O que está implementado é assim: 
if (nresto == 0 || nresto == 1 || nresto == 10)
    ndig = 1;
else 

    ndig = (11 - nresto);

return
ndig;

Acredito que a forma correta é a seguinte:
if (nresto == 10)
    ndig = 1;
else if (nresto == 0 || nresto == 1)
    ndig = 0;
else
    ndig = (11 - nresto);

return
ndig;

 

 

Será que a documentação está correta e o codigo errado ou o contrario?! 

 

 

Coordinator
Feb 18, 2009 at 2:49 PM
Olá Pedro,

na verdade o erro no calculo da DV da linha digitavel. O nosso número estava pegando somente 12 posições, quando era pra pegar 13 posições.

De qualque forma valeu!

;)
Jul 13, 2009 at 7:17 PM

Olá...

Desculpem estar revivendo um tópico aparentemente resolvido, mas pude constatar que o erro sobre o que o Pedro informara, nao parece estar corrigido nas versões posteriores...

Andei buscando no fonte, sobre estar pegando 12 posições e nao 13...

Mas sem sucesso encontrei algo sobre, e por estar com o tempo de projeto estourado e com muitas coisas ainda pra fazer, recorri a "solução" indicada por Pedro.

 

Alterando tb o arquivo Banco_Santander.cs no método ValidaBoleto(Boleto boleto) como segue a baixo:

 

public override void ValidaBoleto(Boleto boleto)
{
 if (!((boleto.Carteira == "102") || (boleto.Carteira == "101") || (boleto.Carteira == "201")))
throw new NotImplementedException("Carteira Não implementada.");

 if (this.Codigo == 353)
{
if (boleto.NossoNumero.Length != 7)
throw new NotImplementedException("Nosso Número deve ter 7 posições para o banco 353.");
}

if (this.Codigo == 8)
{
if (boleto.NossoNumero.Length != 8)
throw new NotImplementedException("Nosso Número deve ter 7 posições para o banco 008.");
}

if (this.Codigo == 33)
{
//De 13 para 12
if (boleto.NossoNumero.Length != 12)
throw new NotImplementedException("Nosso Número deve ter 12 posições para o banco 033.");
}
if (boleto.Cedente.Codigo.ToString().Length > 7)
throw new NotImplementedException("Código cedente deve ter 7 posições.");

boleto.LocalPagamento += "Grupo Santander - GC";

if(EspecieDocumento.ValidaSigla(boleto.EspecieDocumento) == "")
boleto.EspecieDocumento = new EspecieDocumento_Santander(2);

boleto.FormataCampos();
}

 

Espero n ter causado tumulto...