quinta-feira, 28 de janeiro de 2010

Função MODULO 11 para o SQL Server

Conforme eu havia publicado em Junho de 2004 (http://www.linhadecodigo.com/Dica.aspx?id=1158)

Módulo 11 para cálculo do dígito verificador de Agência, Código de Cedente, Nosso Numero e etc.
Eu passei um bom tempo procurando na web um script da função Modulo 11, para o MSSQLServer, e não encontrei. Então resolvi desenvolver uma e compartilhar com vocês.

Caso ocorra algum problema, por favor entre em contato.

Abraço,

Elton Bicalho

Em seguida está o código do script.

CREATE FUNCTION 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
GO

/* Exemplo:
Calculando o Digito verificador do Banco do Brasil
*/
SELECT dbo.Modulo11('98710223423')

Nenhum comentário: