Jump to content
Fórum Script Brasil
  • 0

Calculo dv Banco Santander


Alberto Mota

Question

Prezados colegas, essa semana atravessei uma luta de homologação de boletos do Santander.

Foi homologado, mas num dos boletos há algo errado quanto ao calculo do resto.

Segui fielmente o manual e graças a uma função do fulvio tudo estava normal.

A sequencia é o nosso numero 400000192433 , 12 digitos onde o dv será o 13º

usando pesos de 2 a 9 a soma é 122.

Sendo que o resto de 122 dividido por 11 é 1, sem sombra de duvidas.

Porem o Banco Santander alega que é 0 e a palavra final é deles.

Em qualquer linguagem: access, sql server, excel, vai dar sempre 1.

Como eles conseguiram encontrar esse dv = 0 ?

Ou existe mesmo um erro de calculo no sistema do banco?

A divisão não é exata. 122/11 vai dar 11,09090909

trabalhando com o inteiro 11 multiplico por 11 = 121

portanto 122 - 121 = 1

Existe uma solução para esse problema no sql server?

Desde já, obrigado.

Link to comment
Share on other sites

12 answers to this question

Recommended Posts

  • 0

Boa tarde Alberto,

Como estão as coisas, tudo bem?

Realmente os cálculos estão corretos... mas o que me chamou a atenção foram os pesos de 2 a 9:

- Se utilizar desta forma, o resultado será 122 mesmo.

- Mas se utilizar sem os pesos, a soma dará 154. Aí o DV será 0 (zero). O ultimo peso será 13.

Mas ai... qual está correto? :.)

Link to comment
Share on other sites

  • 0

Fulvio, tudo tranquilo.

Obrigado por responder.

Vou colocar aqui o que está no manual, na íntegra:

-------------------------------------------------------------------

Nosso Número

Para o cálculo, utilizar módulo 11, peso 2 a 9

Composição do Nosso Número: NNNNNNNNNNNN D onde:

N = Faixa seqüencial de 000000000001 a 999999999999

D = Dígito de controle.

Exemplo de cálculo do dígito:

Supondo-se que: Nosso Número = 566612457800

Inverter da direita para a esquerda na vertical.

0 X 2 = 0

0 X 3 = 0

8 X 4 = 32

7 X 5 = 35

5 X 6 = 30

4 X 7 = 28

2 X 8 = 16

1 X 9 = 9

6 X 2 = 12

6 X 3 = 18

6 X 4 = 24

5 X 5 = 25

Total 229 / 11 = 20 resto = 9

11-9 = 2

Nosso numero final: 56612457800-2

Utilizar o módulo 11 – peso de 2 a 9 - para o cálculo deste DV.

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

Somar os resultados obtidos, multiplicar o total da soma por 10 (dez) e dividi-lo por 11 (onze).

O resto desta divisão será o digito do controle.

Se o resto for igual a 0 (zero), 1 (um) ou 10 (dez) o digito será = 1 (um).

-----------------------------------------------------------------------

De onde saiu esse 0(zero) ?

Segui ao pé da letra e de 20 boletos enviados esse deu problema, o de numero 400000192433

Um abraço.

Edited by Alberto Mota
Link to comment
Share on other sites

  • 0

Bom dia Alberto,

O manual está um pouco complicado mesmo...

Estava entendendo tudo, até o momento em que o exemplo é dado:

- Soma dos valores, pega o resto da divisão e subtrair de 11.

Logo abaixo, a explicação do manual:

Somar os resultados obtidos, multiplicar o total da soma por 10 (dez) e dividi-lo por 11 (onze).

- No exemplo não foi feito desta forma. Não houve a multiplicação do valor encontrado.

Outra explicação:

Se o resto for igual a 0 (zero), 1 (um) ou 10 (dez) o digito será = 1 (um).

- Isto significa que em nenhum momento haverá dv=0, pois quando houver, será necessário substituí-lo por 1.

Parece que as 2 formas de implementação, retornam o mesmo resultado (se for isto, deveriam explicar no manual). Segue script abaixo:

SELECT 11-(122 %11)

SELECT ((122 *10)%11)

Tem como você passar pela crítica algum outro número que tenha o resultado do dv=10?

Pode ser isso. Os restos igual a 10 ter o dv igual a 0...

Dê uma olhada neste link. O cpf e o titulo eleitor tem esta implementação (O resto=10, o dv=0)

http://ghiorzi.org/cgcancpf.htm

(para faciliar, procure na página por "O resto 10 será").

Link to comment
Share on other sites

  • 0

Boa tarde, Fulvio.

Bastante confuso esse manual.

Houve um boleto que nem enviei, pois iriam dizer que estava errado:

O numero é 000000038920

A soma dos pesos será 100. No sqlserver o dv encontrado foi 1,

100 / 11 = 9,090909

resto = 1 , logo pelo manual 11- 1 = 10

e depois se tornará 1 pelo enunciado final

Imagino que retornaria por causa das decimais , 090909

Mas o mistério continua. Pedi que informassem como foi encontrado o dv = 0 e não tinham como fazer isso.

Fulvio, muito obrigado.

Vou ver com calma o link que indicou. Qualquer novidade informarei.

Um abraço.

Link to comment
Share on other sites

  • 0

Olá pessoal,

Alguns anos depois e aqui estou eu com dificuldades na geração de boletos para o Santander.

A documentação que encontrei sobre a geração do Nosso Número e DV foi nesse site: http://boletophp.com.br/

Porém, não sei se está atualizada, já procurei bastante algum tipo de manuel fornecido pelo Santander e não encontro.

No manual que baixei do site acima tem a seguinte afirmação:

FÓRMULA PARA CÁLCULO DO DÍGITO VERIFICADOR NO NÚMERO BANCÁRIO (NOSSO NÚMERO)

Exemplo 01

O NÚMERO BANCÁRIO é composto por 3 partes;

3 (três) dígitos para o número da Agência (constante);

7 (sete) dígitos para a numeração sequencial; e

1 (um) dígito verificador;

Beleza, mas a agência aqui da empresa tem 4 dígitos. E essa parte dos 7 dígitos, tem que ser obrigatoriamente 7 digitos?

Estou meio perdido, já pesquisei bastante e não encontro uma solução.

OBS: Existe outro sistema que também gera boletos pra mesma empresa, será que isso pode causar algum problema? Pois existe a possibilidade do meu sistema que é novo gerar um 'nosso número' que já tenha sido gerado anteriormente por esse outro sistema.

Desde já grato pela atenção,

Edited by Rafael Rocha B.
Link to comment
Share on other sites

  • 0

Boa tarde Rafael,

Toda agência bancária possui 4 dígitos. Os 7 dígitos para a numeração sequencial devem ser 7 digitos mesmo. Pode ser: 0000001.

A numeração sequencial é importante para a empresa, para seu controle interno.

Se quiser 2 sistemas ao mesmo tempo gerando boletos, e não ter dor de cabeça com duplicidades, poderá utilizar a numeração sequencial como identificador. Por exemplo, poderá colocar uma chave única interna do sistema, onde cada transação terá a sua, independente de qual sistema gerar.

Se gerar 2 boletas, será do mesmo registro. Caso não queira, coloque um controlador quando a boleta for gerada. Assim não conseguirá gerá-la novamente.

Olhe no site do Santander.

Link to comment
Share on other sites

  • 0

Em primeiro lugar, obrigado pela atenção fulvio.

Consegui entender mais ou menos o que você disse. Bem, um dos sistemas que gera boleto aqui na empresa não me da acesso algum ao código por ser de uma grande empresa, então não sei como eles fazem para gerar o nosso número.

Enfim, vou dar um exemplo do nosso número do boleto que os sistemas geram:

Sistema 1 (ao qual não tenho acesso ao código)

12000070767-8 (pelo o que entendi esse 120 é fixo)

Sistema 2 (o que estou desenvolvendo)

000000000001-9

Se eu colocar uma numeração fixa no início, por exemplo: 140000000001-9 já elimina totalmente a possibilidade de duplicidade, certo?

Link to comment
Share on other sites

  • 0

Boa tarde Rafael,

No primeiro número: 12000070767-8

Os 4 primeiros números se refere a agência: 1200

Os 7 posteriores números é a empresa que coloca. Você pode colocar o que quiser, pois será um controle seu: 0070767.

O ultimo dígito, se chama dígito verificador. Ele é calculado de acordo com os demais números. Ele serve para verificar se a sequência dos 11 primeiros números foram digitados corretamente: 8

Se colocar um número fixo no começo (como no exmeplo o 1400), você estará informando outra agência.

Se não tiver controle sobre as numerações geradas, pode começar a sequência dos 7 digitos do fim para o começo.

Ao invés de começar com: 0000001, 0000002, ...

Começe com: 9999999, 9999998, ...

OBS.: vai chegar um momento em que os número passarão a coincidir.

Link to comment
Share on other sites

  • 0

102 é cobrança sem registros, ou seja, você não envia um arquivo texto chamado Remessa,

receberá apenas do Santander o arquivo retorno, onde o mais importante para vc

na quitação é o nosso numero.

No Nosso numero não estara contido a agencia e conta corrente.

Deverá ter um campo sequencial, a chave primária de sua tabela.

São 13 digitos do nosso numero que você pode concatenar com campos que julgar importantes.

exemplo: '5' + CAST(dbo.zeros(dbo.TblMovimentacao.seq, 12) AS Varchar) AS NN

A função zeros coloca 12 zeros a frente.

Se o campo for 150 então será 5000000000150

Eu coloco 12 para a chave da tabela que é autonumeração e um numero de identificação

fixo por se tratar de varias filiais, para que esse numero nunca se repita ao longo do tempo.

Espero ter ajudado.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...