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

(Resolvido) Confirmação do Módulo 11


Alberto Mota

Pergunta

Analisando a função do módulo 11 do sql server que o Jhonas corrigiu resolvi constatar

minuciosamente se havia alguma falha de interpretação.

O que esta no manual da Caixa é o seguinte:

Módulo "11", com peso de 2 a 9, utilizando o digito 1 para os restos 0, 10 ou 1 (regra

exclusiva para cálculo do DV geral do código de barras);

na função o que foi alterado foi a variavel @retorno e não a variavel @resto.

Talvez esteja de fato resolvido, mas confesso que estou com dúvidas.

Por isso gostaria de ter essa confirmação. Haviam 965 boletos cujos dv geral eram 0

e com a função todos ficaram como 1. É isso mesmo?

Desde já agradeço.

Eis a função:

USE [secraso]

GO

/****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/23/2010 11:22:30 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION [dbo].[Modulo11](@VALOR varchar(60))

RETURNS CHAR(1)

AS

BEGIN

DECLARE

@SOMA INT,

@CONTADOR INT,

@PESO INT,

@DIGITO INT,

@RETORNO CHAR(1),

@BASE INT,

@RESTO BIT

SET @SOMA = 0

SET @PESO = 2

SET @BASE = 9

SET @RESTO = 0

SET @CONTADOR = Len(@VALOR)

LOOP:

BEGIN

SET @SOMA = @SOMA + (Convert(int, SubString(@VALOR, @CONTADOR, 1)) *

@PESO)

IF (@PESO < @BASE)

SET @PESO = @PESO + 1

ELSE

SET @PESO = 2

SET @CONTADOR = @CONTADOR-1

END

IF @CONTADOR >= 1 GOTO LOOP

IF (@RESTO = 1)

BEGIN

SET @RETORNO = (@SOMA % 11)

END

ELSE

BEGIN

SET @DIGITO = 11 - (@SOMA % 11)

IF (@DIGITO > 9) SET @DIGITO = 0

SET @RETORNO = @DIGITO

END

IF @RETORNO=0 or @RETORNO=10

SET @RETORNO = 1

RETURN @RETORNO

END

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Módulo "11", com peso de 2 a 9, utilizando o digito 1 para os restos 0, 10 ou 1 (regra

exclusiva para cálculo do DV geral do código de barras);

na função o que foi alterado foi a variavel @retorno e não a variavel @resto.

Talvez esteja de fato resolvido, mas confesso que estou com dúvidas.

Por isso gostaria de ter essa confirmação. Haviam 965 boletos cujos dv geral eram 0

e com a função todos ficaram como 1. É isso mesmo?

Veja o codigo que te passei usando a regra

utilizando o digito 1 para os restos 0, 10 ou 1 (regra exclusiva para cálculo do DV geral do código de barras);

IF (@RESTO = 1)

BEGIN

SET @RETORNO = (@SOMA % 11)

END

ELSE

BEGIN

SET @DIGITO = 11 - (@SOMA % 11)

IF (@DIGITO > 9) SET @DIGITO = 0

SET @RETORNO = @DIGITO

END

IF (@RESTO = 0) OR (@RESTO = 10)

SET @RETORNO = 1

RETURN @RETORNO

END

Veja o seu codigo

IF (@RESTO = 1)

BEGIN

SET @RETORNO = (@SOMA % 11)

END

ELSE

BEGIN

SET @DIGITO = 11 - (@SOMA % 11)

IF (@DIGITO > 9) SET @DIGITO = 0

SET @RETORNO = @DIGITO

END

IF @RETORNO=0 or @RETORNO=10

SET @RETORNO = 1

RETURN @RETORNO

END

voce esta testando o valor de retorno e o outro codigo esta testando o valor de resto

então pela regra se a variavel retorno recebe o valor do digito, então se o resto for 0, 10 ou 1 o dv obrigatoriamente devera ser 1

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, obrigado pela resposta.

Então esta concluído.

Só precisava ter essa certeza.

Depois de um trabalho tão exaustivo, não poderia deixar de tomar cuidado.

Resta a fazer esmiuçar essa função e estuda-la a fundo para

referencias futuras e avançar no meu conhecimento.

Um abraço.

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...