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

(Resolvido) Resto do Modulo 11 Código de Barras


Alberto Mota

Pergunta

Estou usando o sql server e o delphi 7.

Devido a imprecisão do manual de boleto bancário da caixa.

Depois de 6000 impressões, 2 clientes ligaram dizendo que não conseguiram

efetuar o pagamento.

A coincidência é que o dv geral do código de barras dos dois é 0.

Liguei para lá e disseram que não pode ser 0 no dv geral.

Agora é que dizem isso.

Abaixo segue a função que uso para saber o dv geral do módulo 11.

Se o resto for 0, 10 ou 1 o dv geral será 1.

Como adequo essa função?

Desde já agradeço.

USE [secraso]

GO

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

RETURN @RETORNO

END

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

elimine o dv pois ele não é necessario quando é feita a leitura do código de barra

Se o resto for 0, 10 ou 1 o dv geral será 1.

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
RETURN @RETORNO
END
onde voce está testanto o resto 0 e 10 ?
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

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Jhonas, havia colocado meu problema também no forum de sql server,

e a resposta foi igual a sua. Resolveu e agradeço novamente a ajuda.

Um abraço.

Segue o código corrigido:

USE [secraso]

GO

/****** Object: UserDefinedFunction [dbo].[Modulo11] Script Date: 01/21/2010 21:49:02 ******/

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

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,4k
×
×
  • Criar Novo...