Skip to content

Instantly share code, notes, and snippets.

@dijeferson
Created July 20, 2015 21:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dijeferson/b6eb7e2baaa0199ea6ea to your computer and use it in GitHub Desktop.
Save dijeferson/b6eb7e2baaa0199ea6ea to your computer and use it in GitHub Desktop.
Validação de CNPJ em SQL
-- ================================================================
-- Author: Jeferson Santos
-- Create date: 07/12/2006
-- Description: Valida um numero de CNPJ
-- Parameters: @CNPJ varchar(14)- Numero de CNPJ a ser Verificado
-- ================================================================
CREATE FUNCTION f_VerificaCNPJ (@CNPJ varchar(14))
RETURNS varchar(14)
AS
BEGIN
DECLARE @CNPJt varchar (14)
DECLARE @FatorMultiplicacao_fase1 varchar(12)
DECLARE @FatorMultiplicacao_fase2 varchar(13)
DECLARE @Resultado int
DECLARE @cont int
DECLARE @DigitoVerificador1 int
DECLARE @DigitoVerificador2 int
-- Inicializa variaveis
SET @cont = 0
SET @Resultado = 0
SET @DigitoVerificador1 = 0
SET @DigitoVerificador2 = 0
SET @CNPJt = substring(@CNPJ, 1, 12)
-- Fator multiplicativo que deve ser aplicado sobre o CNPJ
-- para obtenção do código verificador
-- valor constante!
SET @FatorMultiplicacao_fase1 = '543298765432' -- #1
SET @FatorMultiplicacao_fase2 = '6543298765432' -- #2
-- Soma da multiplicação das colunas do CNPJ com o fator de multiplicacao #1
WHILE @cont BEGIN
SET @Resultado = @Resultado + convert(int, substring(@CNPJt, @cont, 1)) * convert(int, substring(@FatorMultiplicacao_fase1, @cont, 1))
SET @cont = @cont + 1
END
-- Verifica o 'resto' da divisao por 11
SET @Resultado = @Resultado%11
-- Gera o digito verificador #1
IF (@Resultado)
BEGIN
SET @DigitoVerificador1 = 0
END
ELSE
BEGIN
SET @DigitoVerificador1 = 11 - @Resultado
END
-- Fim da primeira fase:
SET @CNPJt = @CNPJt + convert(varchar, @DigitoVerificador1)
-- Reseta o contador
SET @cont = 0
SET @Resultado = 0
-- Soma da multiplicação das colunas do CNPJ com o fator de multiplicacao #1
WHILE @cont BEGIN
SET @Resultado = @Resultado + convert(int, substring(@CNPJt, @cont, 1)) * convert(int, substring(@FatorMultiplicacao_fase2, @cont, 1))
SET @cont = @cont + 1
END
-- Verifica o 'resto' da divisao por 11
SET @Resultado = @Resultado%11
-- Gera o digito verificador #2
IF (@Resultado)
BEGIN
SET @DigitoVerificador2 = 0
END
ELSE
BEGIN
SET @DigitoVerificador2 = 11 - @Resultado
END
-- Fim da segunda fase:
SET @CNPJt = @CNPJt + convert(varchar, @DigitoVerificador2)
-- Verifica digitos verificadores gerados com os do enviados
IF (substring(@CNPJ, 13, 1) @DigitoVerificador1) OR (substring(@CNPJ, 14, 1) @DigitoVerificador2)
BEGIN
RETURN '0'
END
RETURN @CNPJ
END
GO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment