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.