Correção Cálculo do Digitão da Cobrança Banco Real

Feb 18, 2009 at 2:27 PM
Edited Feb 18, 2009 at 5:02 PM
Olá a todos, antes de mais nada gostaria de parabenizar o projeto. Excelente trabalho.
 
No intuito de colaborar e verificar se a correção que fiz está ok (qualquer comentário é muito bem vindo), a seguir uma explicação da alteração que implementei para o boleto do Banco Real no que se refere ao Cálculo do Digitão da Cobrança.

No código original (Jan 14 at 1:40 PM) a definição do Digitão da Cobrança é calculado da seguinte maneira:

// Calcula o DAC da Conta Corrente
_dacContaCorrente = Utils.Mod10(boleto.Cedente.ContaBancaria.Agencia + boleto.Cedente.ContaBancaria.Conta);
boleto.Cedente.ContaBancaria.DigitoConta = _dacContaCorrente.ToString();

onde boleto.Cedente.ContaBancaria.DigitoConta == Cálculo do Digitão da Cobrança

segundo o manual do Banco Real o Cálculo do Digitão da Cobrança é feito da seguinte maneira para cobrança sem registro (13 dígitos):

"Para se apurar o Digitão da Cobrança, serão necessárias as seguintes informações:
 - Nosso Número : com 7 dígitos para cobrança registrada e até 13 dígitos para cobrança sem registro
 - Código da Agência : 4 dígitos
 - Número da Conta : 7 dígitos"

o código original não atende essa regra pois calcula o dígito utilizando agência + conta. 

A mudança necessária que apliquei para seguir a regra foi simples, ao invés de utilizar a variável _dacContaCorrente (que calcula o dígito utilizando "boleto.Cedente.ContaBancaria.Agencia + boleto.Cedente.ContaBancaria.Conta"), substitui pela variável "_dacNossoNumero" que contém o conjunto correto de informações (NossoNumero + Agencia + Conta) para o cálculo do dígito (cálculo este feito pela função Utils.Mod10).
A função utilizada (CalcularDigitoNossoNumero) para definir a variável  "_dacNossoNumero" eu tive que modificar também. O parâmetro da função substring na variável boleto.NossoNumero, ao invés de "boleto.NossoNumero.Substring(0, 9)" eu coloquei "boleto.NossoNumero.Substring(0, 13)"  

Outra dúvida que tenho é se alguem resolveu para o banco Real o problema descrito pelo colega curvello no post "Formação da linha digitavel BANCO REAL" em que o problema é o "Fator Vencimento"??

Abraços

Dan Moreira

Coordinator
Feb 18, 2009 at 6:06 PM
Olá,

seja bem vindo e fique a vontade em compartilhar seus conhecimentos.

Primeiramente é necessário verificar a carteira. Depois verificar o segmento da carteira, caso possua. Sendo assim, verificar se para o calculo do digito é comun a todas as carteiras.
Caso não seja, colocar uma crítica para carteira desejada, para cada calculo do DV.

Lendo rapidamente a documentação do Real, existem 2 tipos de cobranças:

- Cobrança Registrada
- Cobrança Sem Registro

E as diferenças entre elas são o tamanho do número do banco:  

NUMERO DO BANCO  : COM  7 DIGITOS P/ COBRANCA REGISTRADA

                   ATE 15 DIGITOS P/ COBRANCA SEM REGISTRO


Para o calculo do DAC da conta corrente, com base na documentação é:

2- VERIFICAÇÃO DO DIGITO DA CONTA CORRENTE - DAC                         

                                                                                                                                                      

AAAACCCCCCC - Agencia Conta Corrente                                       

81472259395 - Pesos                                                        

                                                                           

Campos:                                                                     

A = Código da Agencia                                                      

C = Numero da Conta Corrente                                               

                                                                           

PROCEDIMENTOS                                                              

 

- Multiplica-se  cada  "Peso"  pelo  valor correspondente a sua posição no  campo "AAAACCCCCCC";                                                     

- Soma-se o resultado de todas as multiplicações, obtendo-se um  resultado   "X";                                                                     

- Divide-se o resultado "X" por 11 e obtêm-se o resto da divisão "R";      

- Subtrai-se o resto "R" de 11 e obtêm-se então o digito da Conta.         

- Se o resto for igual a "0", o digito será 1                            

- Se o resto for igual a "1", o digito será 0                            

                                                                           

Exemplos:                                                                   

 

- 0  4   0   9    9    0   0    6   0    7    3 - Agencia/Conta Corrente   

  8  1   4   7    2    2   5    9   3    9    5 - Pesos          

         

0 + 4 + 0 + 63 + 18 + 0 + 0 + 54 + 0 + 63 + 15 = 217                     

217 : 11 = 19, resto = 8                                                 

11 - 8 (resto) = 3 (Digito Agencia/Conta - DAC)                          

                                                                           

- 0   5  0  1    7   0   1    6    8    9    4                             

  8   1  4  7    2   2   5    9    3    9    5                             

 

  0 + 5 + 0 + 7 + 14 + 0 + 5 + 54 + 24 + 81 + 20 = 210                    

  210 : 11 = 19, resto = 1                                           

  Para resto = 1, Digito Agencia/Conta = 0                           



No banco real a carteira implementada é a 57.

Qualquer dúvida entre em contato.


;)

Feb 18, 2009 at 6:42 PM
Edited Feb 18, 2009 at 6:44 PM
Olá Stiven, obrigado pela observação. Acho que estamos com documentos diferentes pois o PDF que recebi do Banco Real dia 16/2/2009 diz o seguinte a respeito do Cálculo do Digitão da Cobrança (o dígito verifiador no campo "Agência/Código cedente" no boleto):


Cálculo do Digitão da Cobrança
Cobrança com registro e cobrança sem registro:

Para se apurar o Digitão da Cobrança, serão necessárias as seguintes informações:
-  Nosso Número : com 7 dígitos para cobrança registrada e até 13 dígitos para cobrança sem registro
-  Código da Agência : 4 dígitos
-  Número da Conta : 7 dígitos

Aplica-se os pesos 2,1,2,1… aos algarismos do número composto de Nosso Número +  Agência  +  Conta
Corrente,  iniciando-se  da  direita  para  esquerda,  conforme  exemplo  abaixo.  O  conteúdo  de  cada  campo
deverá ser multiplicado pelos pesos.

Se  o  resultado  da  multiplicação  for  maior  do  que  9,  somam-se  os  algarismos  do  produto  para  se  obter
somente um algarismo.

Exemplo: 2 X 9 = 18 = 1 + 8 = 9
                1 X 1 =  1  = 1

- Somam-se os produtos obtidos no item anterior.
- Divide-se a soma por 10, obtendo-se o resto da divisão.
- Subtrai-se o resto de 10 (se o resultado for 10, o dígito será zero).


Cobrança Sem Registro 

Nosso Número : 0000000003025
Agência : 0501
Conta : 6703255

Campo : 0     0     0     0     0     0     0     0     0     3     0     2     5     0     5     0     1     6     7     0     3     2     5     5
Pesos : 1     2     1     2     1     2     1     2     1     2     1     2     1     2     1     2     1     2     1     2     1     2     1     2
Resultado (Campo * Pesos ): 0     0     0     0     0     0     0     0     0     6     0     4     5     0     5     0     1    12     7     0     3     4     5    10
Resultado Final : 0     0     0     0     0     0     0     0     0     6     0     4     5     0     5     0     1     3     7     0     3     4     5     1

Soma :44
Resultado ( Soma / 10 ) :4
Resto de Soma / 10 :4
DV ( 10 - Resto ) :6

A versão desrita no documento é a seguinte:
"Data da Última Atualização: 29/12/2006
Versão : 3.5"

Acredito que estamos falando do mesmo campo correto?

Obrigado

Dan Moreira

Coordinator
Feb 18, 2009 at 7:04 PM
Dan, envie pra mim essa documentação: stiven@callas.com.br.

"Algo está errado, que não está certo!" rsssssssss