set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Modulo11Base7](@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 = 7
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
Pergunta
Alberto Mota
Prezados colegas, o cálculo do nosso numero do Bradesco é diferente dos demais,
requer que seja colocada a letra P quando o resto da divisão for 1.
Tentei um case, mas não funcionou, dá erro de conversão:
CASE WHEN resto = 1 THEN 'P' ELSE resto END AS dvresto
se eu colocar
CASE WHEN resto = 1 THEN 0 ELSE resto END AS dvresto, então a consulta é executada.
Há algum tempo Fulvio me passou um script do modulo 11 que esta ok para outros bancos,
mas para o Bradesco tambem não consegui adapta-lo, pois é justamente em cima do resto:
No manual
----------------------------------------------------------------------------------
Obs.: Se o resto da divisão for “1”, desprezar a diferença entre o divisor
menos o resto que será “10” e considerar o dígito como “P”.
----------------------------------------------------------------------------------
2- Se o resto da divisão for “0”, desprezar o cálculo de subtração entre
divisor e resto, e considerar o “0” como dígito.
----------------------------------------------------------------------------------
Abaixo segue o script
-----------------
Desde já, obrigado.
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.