Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Calcular Dígito Verificador


João Paulo Taraciuk

Pergunta

Olá

Estou com uma dúvida no que diz respeito ao cálculo do dígito verificador do Nosso Número de boleto do Banco do Brasil, no meu caso, seria uma carteira de 7 digitos e o Nosso Numero tem 10, então teríamos 17 casas, pelo que entendi, teria que utiliza o calculo do Modulo 11, pelo layout, mas lá pega 11 números para fazer a conta, e, no meu caso, eu tenho 10.

Esse dígito do Nosso Número, acho que não vai fazer parte da Linha digitável do código de barras.

O que eu fiz foi mais ou menos isso:

DECLARE 
    @i INT,
    @Contador INT,
    @Num VARCHAR(10),
    @Soma INT, 
    @total NUMERIC(10, 4),
    @digito VARCHAR (1)

-- Aqui fica uma das minhas dúvidas, se eu pego o número todo ou somente os 10 pro cálculo 
-- Esse é composto pelos 7 dígito do contrato e os 10 do Nosso Numero
--set @Num = '12345670001123456' 
set @Num = '0001123456'       
set @contador = 9
set @i = LEN(@Num)
set @soma = 0
set @total = 0.00

while @i > 0
begin
    if(@Contador >= 2)
    begin
        select @Soma = @Soma + CONVERT(INT, SUBSTRING(@num, @i, 1)) * @contador        
        set @contador = @contador -1
    end    
    else
    if(@Contador < 2)
    begin
        set @Contador = 9        
        select @Soma = @Soma + CONVERT(INT, SUBSTRING(@num, @i, 1)) * @contador    
        set @contador = @contador -1 
    end

    set @i = @i - 1    
end
SET @total = CONVERT(NUMERIC(10,4), @soma) / 11

SELECT @digito = SUBSTRING(CONVERT(VARCHAR(10), @total), CHARINDEX('.', @total) + 1, 1)

print @digito

Outra coisa que não compreendi, é se, arredonda as casas depois da vírgula ou pega "seco" o primeiro dígito depois do ponto, nesse código eu fiz somente pegando o primeiro depois da vírgula.

Se alguém puder me ajudar a solucionar essa dúvida, eu agradeço.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Foi seguindo algo mais ou menos parecido que eu criei esse código, pegando pelo manual do BB:

Layout Boleto Banco do Brasil

Fiquei um tanto em dúvida somente na geracao do Dígito no Nosso Número, que em alguns boletos que ví por aí, ele não aparece, mas tem alguns que tem esse dígito, e, se reparar nesse manual, que tá no link do BB, repare na página 17, onde o dígito se faria do calculo de 712/11, e, no exemplo o resto da divisao daria 8, não entendi a forma de cálculo.

No meu cálculo daria 7, mesmo para o SQL Server:

select round(64.727272727272727272727272727273, 1)

Acabei de enviar um email à ouvidoria do BB, vamos ver em quantos dias vou receber a resposta.

Editado por João Paulo Taraciuk
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia João,

Faça o calculo com lapis e papel... fica mais facil de entender. A divisão de 712 por 11 não é exata. O resultado será 64 e terá o resto 8. O que interessa no calculo será este resto, e não o resultado da divisão.

Faça a divisão na mão que entenderá.

Um exemplo para sql:

-- o resultado da divisão pega apenas numeros inteiros
select 712/11

-- o resultado da divisão é o resto da operação
select 712%11

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...