quinta-feira, 16 de dezembro de 2010

Function Valida_CPF

Hoje em dia há necessidade de efetuar a validação do CPF não só na aplicação mas também na base de dados. Pensando nisso abaixo segue o código para validar o CPF através de uma Function:



USE [Banco de Dados]
GO
/****** Object: UserDefinedFunction [dbo].[FN_VALIDA_CPF] Script Date: 12/16/2010 17:22:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[FN_VALIDA_CPF]
(
@CPF VARCHAR(14)
)
RETURNS BIT AS

BEGIN

DECLARE @NEW_CPF VARCHAR(14)
DECLARE @CPF2 VARCHAR(14)
DECLARE @X INT
DECLARE @FN_VALIDA_CPF BIT

SET @NEW_CPF = ''
SET @X = 0
SET @FN_VALIDA_CPF = 1


SELECT @FN_VALIDA_CPF = (CASE RTRIM(LTRIM(@CPF))
WHEN '00000000000' THEN 0
WHEN '11111111111' THEN 0
WHEN '22222222222' THEN 0
WHEN '33333333333' THEN 0
WHEN '44444444444' THEN 0
WHEN '55555555555' THEN 0
WHEN '66666666666' THEN 0
WHEN '77777777777' THEN 0
WHEN '88888888888' THEN 0
WHEN '99999999999' THEN 0
END)

IF @FN_VALIDA_CPF = 0
RETURN @FN_VALIDA_CPF

SET @FN_VALIDA_CPF = 0

DECLARE @SOMA INT
DECLARE @DV1 INT
DECLARE @DV2 INT
DECLARE @DVS CHAR(2)

SET @SOMA = 0
SET @DV1=0
SET @DV2=0
SET @DVS = ''

WHILE (@X=48 and ASCII(SUBSTRING(@CPF,@X,1))<=57
SET @NEW_CPF=@NEW_CPF + SUBSTRING(@CPF,@X,1)
END

IF ISNUMERIC(@NEW_CPF)=0 RETURN 0

SET @CPF = @NEW_CPF

SET @X=0
WHILE (@X<9) BEGIN
SET @X = @X + 1
SET @SOMA = @SOMA + (11-@X) * (CONVERT(int,SUBSTRING(@CPF,@X,1)))
END

SET @DV1 = 11 - (@SOMA % 11)
IF @DV1 IN (10,11)
SET @DV1=0
SET @CPF2 = @CPF + CONVERT(VARCHAR,@DV1)
SET @SOMA = 0

SET @X = 0
WHILE (@X <=9) BEGIN
SET @X = @X + 1
SET @SOMA = @SOMA + (12-@X)*(CONVERT(INT,SUBSTRING(@CPF2,@X,1)))
SET @DV2 = 11 - (@SOMA % 11)
END

IF @DV2 IN (10,11)
SET @DV2=0

SET @DVS = CONVERT(VARCHAR,@DV1) + CONVERT(VARCHAR,@DV2)

IF @DVS = RIGHT(@CPF,2)
SET @FN_VALIDA_CPF = 1
ELSE
SET @FN_VALIDA_CPF = 0

RETURN (@FN_VALIDA_CPF)

END

Nenhum comentário:

Postar um comentário