Função para validar CPF e CNPJ no SQL Server

Boa tarde!

Pessoal,
Muitas vezes para garantir a qualidade e segurança nas informações registradas no banco de dados, precisamos validar algumas dessas informações.
Abaixo estarei demonstrando como validar CPF e CNPJ, onde como parâmetro informo o tipo de pessoa, 1 para pessoa física e 2 para pessoa jurídica mais o número do CPF e CNPJ.

Sintaxe de criação: MSSQL SERVER

-- ==================== INÍCIO DO SCRIPT ====================

-- ==================== INÍCIO DO SCRIPT ====================
-- CRIAR A FUNCTION CnpjCpf
-- ==========================================================

-- CPF
SELECT DBO.CnpjCpf (1, '99999999999')
-- CNPJ
SELECT DBO.CnpjCpf (2, '99999999999999')

GO
	SET ANSI_NULLS ON
	SET QUOTED_IDENTIFIER ON
GO

CREATE   FUNCTION [dbo].[CnpjCpf]( @PESSOA INT, @INSCRICAO VARCHAR(14) )
RETURNS VARCHAR(8) -- VÁLIDO/INVÁLIDO
AS
BEGIN
DECLARE 
	@SOMA_DV1		INT, 
	@SOMA_DV2		INT,
	@MCONT_DIG		INT,
    @UU				INT,
	@DV1_INSCRICAO	INT,
	@DV2_INSCRICAO	INT,
    @DIG_INSCRICAO	INT,
	@VERI_DIG		VARCHAR(2),
    @RETORNO		VARCHAR(8)

SET @SOMA_DV1 = 0
SET @SOMA_DV2 = 0 
SET @DIG_INSCRICAO = 0
SET @MCONT_DIG = 0 

IF @PESSOA = 2   
BEGIN
  SET @INSCRICAO = RIGHT('00000000000000'+@INSCRICAO,14)
  SET @VERI_DIG = SUBSTRING(@INSCRICAO,13,2)
  WHILE @MCONT_DIG  0 AND @MCONT_DIG  5 AND @MCONT_DIG < 13
  BEGIN
    SET @SOMA_DV1 = @SOMA_DV1 + @DIG_INSCRICAO * (14 - @MCONT_DIG)
    SET @SOMA_DV2 = @SOMA_DV2 + @DIG_INSCRICAO * (15 - @MCONT_DIG)
  END  
  ELSE IF @MCONT_DIG = 13
  BEGIN
    SET @SOMA_DV2 = @SOMA_DV2 + @DIG_INSCRICAO * 2
  END
  SET @MCONT_DIG = @MCONT_DIG + 1
  END
  SET @DV1_INSCRICAO =  @SOMA_DV1 - (ROUND((@SOMA_DV1 / 11),0) * 11)

  IF  @DV1_INSCRICAO = 1 OR @DV1_INSCRICAO = 0
  BEGIN
    SET @DV1_INSCRICAO = 0
  END ELSE
  BEGIN
    SET @UU = @DV1_INSCRICAO
    SET @DV1_INSCRICAO = 11 - @UU
  END

  SET @DV2_INSCRICAO = @SOMA_DV2 - (ROUND((@SOMA_DV2 / 11),0) * 11)
  IF @DV2_INSCRICAO = 1 OR @DV2_INSCRICAO = 0	
  BEGIN
    SET @DV2_INSCRICAO = 0
  END ELSE
  BEGIN
    SET @UU = @DV2_INSCRICAO
    SET @DV2_INSCRICAO = 11 - @UU
  END
  SET @UU = CONVERT(INT,CONVERT(VARCHAR, @DV1_INSCRICAO)+
  CONVERT(VARCHAR, @DV2_INSCRICAO))

END 

ELSE IF @PESSOA = 1   -- CPF
BEGIN
  SET @INSCRICAO = (SELECT CONVERT(VARCHAR,CONVERT(NUMERIC(14,0),@INSCRICAO) ) )
	
  IF LEN(LTRIM(RTRIM(@INSCRICAO))) = 2 
  BEGIN 
    SET @DIG_INSCRICAO = 11 - @MCONT_DIG

    SET @SOMA_DV1 = @SOMA_DV1 + 
    CONVERT( INT ,SUBSTRING(@INSCRICAO,@DIG_INSCRICAO,1) ) *  @MCONT_DIG

    SET @MCONT_DIG = @MCONT_DIG - 1
  END

  SET @DV1_INSCRICAO = @SOMA_DV1 - (ROUND((@SOMA_DV1 / 11),0) * 11)

  IF @DV1_INSCRICAO = 0 OR @DV1_INSCRICAO = 1
  BEGIN
    SET @DV1_INSCRICAO = 0
  END ELSE
  BEGIN
    SET @UU = @DV1_INSCRICAO
    SET @DV1_INSCRICAO = 11 - @UU
  END
  SET @SOMA_DV2 = 0
  SET @MCONT_DIG = 11

  WHILE @MCONT_DIG >= 2
  BEGIN      
    SET @DIG_INSCRICAO = 12 - @MCONT_DIG
    SET @SOMA_DV2 = @SOMA_DV2 + 
    CONVERT(INT, SUBSTRING(@INSCRICAO, @DIG_INSCRICAO,1)) *  @MCONT_DIG
    SET @MCONT_DIG = @MCONT_DIG - 1
  END

  SET @DV2_INSCRICAO = @SOMA_DV2 - (ROUND((@SOMA_DV2 / 11),0) * 11)

  IF @DV2_INSCRICAO = 0 OR @DV2_INSCRICAO = 1 
  BEGIN
    SET @DV2_INSCRICAO = 0
  END ELSE
  BEGIN
    SET @UU = @DV2_INSCRICAO
    SET @DV2_INSCRICAO = 11 - @UU
  END
  SET @UU = CONVERT(INT,CONVERT(VARCHAR, @DV1_INSCRICAO)
	   +CONVERT(VARCHAR, @DV2_INSCRICAO)) 
END ELSE 
  SET @UU = -1

END

IF @UU = @VERI_DIG
	SET @RETORNO = 'VÁLIDO'
ELSE 
SET @RETORNO = 'INVÁLIDO'

RETURN @RETORNO
END
GO
	SET QUOTED_IDENTIFIER OFF
	SET ANSI_NULLS OFF
GO
-- ==================== FINAL DA EXECUÇÃO ====================

Espero que tenham gostado.

Deixe um comentário