Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alberto Mota

[Resolvido] Calcular dv cobrança Banco Real

Recommended Posts

Bom Pessoal estou quebrando a cabeça e não consigo a solução para calcular o digito de

 

cobrança do Banco Real. Uso o sql server express 2005.

 

Ele é composto por 24 numeros

 

13 do nosso numero + agencia(4) e conta(7)

 

Se colocar assim:

 

dbo.modulo10('000000001567601401736863')

 

Ele me retorna o correto que é 2

 

Se colocar

dbo.Modulo10(SUBSTRING(BaseCobranca, 0, 24)) AS DvCobranca

retorna 8

 

O campo BaseCobranca é a união dos 3 campos que são alfanuméricos.

 

Se alguém puder me auxiliar fico imensamente grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junior, agradeço a atenção

Segue a consulta. Um abraço.

 

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Modulo10](@numero varchar(15))
RETURNS CHAR(1)
AS
BEGIN
 declare
   @max      smallint,
   @contador smallint,
   @peso     varchar(24),
   @resto    smallint,
   @valor    smallint,
   @soma     int,
   @retorno  int
 select @peso = '121212121212121212121212'
 select @max  = datalength(@numero)
 select @peso = right(@peso, @max)
 set @contador = @max+1
 set @soma     = 0
 loop:
       set @contador = @contador-1
       set @valor    = isnull((ascii(substring(@peso, @contador, 1))-48) * 
(ascii(substring(@numero, @contador, 1))-48), 0)
       set @soma     = isnull((select (case when (@valor<10) then 
@valor when  (@valor>9) then @valor-10 end)), 0)+@soma
       set @soma     = isnull((select (case when  (@valor<10) then 
null when  (@valor>9) then 1 end)), 0)+@soma
       if (@contador >1) goto loop
 select @resto= sum(@soma)%10
 select @retorno = case @resto when 0 then 0 else 10-@resto end
 return(Convert(char(1), @retorno))
END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junior, o pessoal do ScriptBrasil me ajudou a resolver.

Bem como voce também indicou para ver o select do substring

 

Criei uma nova função ModuloCob colocando 24 como base. Fico imensamente grato a você pela ajuda.

Amanhã deve vir a resposta da analise de 3 boletos.

Acredito que o DV Geral se der problemas, será da mesma forma e farei as devidas adaptações.

 

Segue o select completo:

 

 

SELECT associado, baseseq, BaseCobranca, dbo.ModuloCob(SUBSTRING(BaseCobranca, 0, 25)) AS DvCobranca, DVGeral, CodigoDebarras, 
'3569' + SUBSTRING(CodigoDebarras, 20, 5) AS BCampo1, dbo.Modulo10('3569' + SUBSTRING(CodigoDebarras, 20, 5)) AS DVCampo1, 
SUBSTRING(CodigoDebarras, 25, 10) AS BCampo2, dbo.Modulo10(SUBSTRING(CodigoDebarras, 25, 10)) AS DVCampo2, SUBSTRING(CodigoDebarras, 
35, 10) AS BCampo3, dbo.Modulo10(SUBSTRING(CodigoDebarras, 35, 10)) AS DVCampo3, exercicio, dtvcto, dtproc, vr, seq, Codigo, Carteira, Agencia, 
Cedente, DvCedente
FROM dbo.QryBoletosMovR3

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fico feliz em saber que resolveu o seu problema e obrigado pelo feedback....

eu imaginei que o problema poderia ser no subselect....

 

Abçs e boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.