iMasters Fóruns: [Resolvido] Calcular dv cobrança Banco Real - iMasters Fóruns

Ir para

Página 1 de 1
  • Novo tópico
  • Responder

[Resolvido] Calcular dv cobrança Banco Real

#1 Membro offline   Alberto Mota Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 7
  • Cadastrado: 16-abril 08

Postou 03 novembro 2009 - 19:31

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.

#2 Membro offline   jus2ka Ícone

  • Junior
  • Ícone
  • Grupo: Membros
  • Posts: 1143
  • Cadastrado: 18-dezembro 06
  • Sexo:Masculino
  • Localização:Sao Paulo

Postou 04 novembro 2009 - 10:07

Alberto, kal eh a regra desta funcao? tem como passar?

Abçs

#3 Membro offline   Alberto Mota Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 7
  • Cadastrado: 16-abril 08

Postou 04 novembro 2009 - 13:07

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

Este post foi editado por quintelab: 04 novembro 2009 - 13:29
Razão por editar:: Adicionado BBCode Sql


#4 Membro offline   jus2ka Ícone

  • Junior
  • Ícone
  • Grupo: Membros
  • Posts: 1143
  • Cadastrado: 18-dezembro 06
  • Sexo:Masculino
  • Localização:Sao Paulo

Postou 04 novembro 2009 - 13:16

alberto, passe alguns resultados deste select

SUBSTRING(BaseCobranca, 0, 24)


Abçs

#5 Membro offline   Alberto Mota Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 7
  • Cadastrado: 16-abril 08

Postou 04 novembro 2009 - 14:28

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.

Este post foi editado por quintelab: 04 novembro 2009 - 15:09
Razão por editar:: Adicionado BBCode Sql


#6 Membro offline   jus2ka Ícone

  • Junior
  • Ícone
  • Grupo: Membros
  • Posts: 1143
  • Cadastrado: 18-dezembro 06
  • Sexo:Masculino
  • Localização:Sao Paulo

Postou 04 novembro 2009 - 15:18

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

Página 1 de 1
  • Novo tópico
  • Responder

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)