CREATE FUNCTION dbo.IsValidCPF
IF EXISTS(
SELECT *
FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[IsValidCPF]') AND
xtype in (N'FN', N'IF', N'TF')
)
BEGIN
DROP FUNCTION [dbo].[IsValidCPF]
END
GO
CREATE FUNCTION dbo.IsValidCPF
(
@CPF varchar(11)
)
RETURNS bit
AS
BEGIN
DECLARE @Digito int
DECLARE @Index int
DECLARE @Modulo int
DECLARE @Soma1 int
DECLARE @Soma2 int
DECLARE @DigitoVerificador1 int
DECLARE @DigitoVerificador2 int
SET @Index = 1
SET @Soma1 = 0
SET @Soma2 = 0
WHILE @Index <= 9
BEGIN
SET @Digito = CAST(SUBSTRING(@CPF, @Index, 1) AS int)
SET @Soma1 = @Soma1 + ((11 - @Index) * @Digito)
SET @Soma2 = @Soma2 + ((12 - @Index) * @Digito)
SET @Index = @Index + 1
END
SET @Modulo = @Soma1 % 11
IF @Modulo < 2
BEGIN
SET @DigitoVerificador1 = 0
END
ELSE
BEGIN
SET @DigitoVerificador1 = 11 - @Modulo
END
SET @Soma2 = @Soma2 + (2 * @DigitoVerificador1)
SET @Modulo = @Soma2 % 11
IF @Modulo < 2
BEGIN
SET @DigitoVerificador2 = 0
END
ELSE
BEGIN
SET @DigitoVerificador2 = 11 - @Modulo
END
IF SUBSTRING(@CPF, 10, 1) = CAST(@DigitoVerificador1 AS varchar(1)) AND
SUBSTRING(@CPF, 11, 1) = CAST(@DigitoVerificador2 AS varchar(1))
BEGIN
RETURN 1
END
RETURN 0
END
GO