sábado, 16 de janeiro de 2016

Funcao Valida CPF ou CNPJ





CREATE FUNCTION [dbo].[Valida_CPFCNPJ](@TEXTO varchar(20)) RETURNS VARCHAR(20)
AS
BEGIN

DECLARE @RESULTADO VARCHAR(20)

DECLARE @CPF_CNPJ VARCHAR(20)

WHILE PATINDEX('%[^0-9]%', @TEXTO) > 0
BEGIN
  SET @TEXTO = STUFF(@TEXTO, PATINDEX('%[^0-9]%', @TEXTO), 1, '')
END

SET @CPF_CNPJ    = @TEXTO

IF LEN(@CPF_CNPJ) NOT IN (11, 14)
BEGIN   
     SET @RESULTADO  = 'Inválido'
     RETURN @RESULTADO
END
 
DECLARE @DIGITO1 INT,  @DIGITO2 INT,  @VALOR1 INT,  @VALOR2 INT
DECLARE @I INT, @J INT, @TOTAL_TMP INT, @COEFICIENTE_TMP INT
   ,    @DIGITO_TMP INT, @VALOR_TMP INT
SET @DIGITO1 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ) - 1, 1)
SET @DIGITO2 = SUBSTRING(@CPF_CNPJ, LEN(@CPF_CNPJ), 1)
SET @J = 1
 
WHILE @J <= 2
BEGIN 
    SELECT @TOTAL_TMP = 0, @COEFICIENTE_TMP = 2
    SET @I = ((LEN(@CPF_CNPJ) - 3) + @J)   
    WHILE @I >= 0
    BEGIN
        SELECT
            @DIGITO_TMP = SUBSTRING(@CPF_CNPJ, @I, 1),
            @TOTAL_TMP = @TOTAL_TMP + (@DIGITO_TMP * @COEFICIENTE_TMP),
            @COEFICIENTE_TMP = @COEFICIENTE_TMP + 1
 
        IF (@COEFICIENTE_TMP > 9) AND LEN(@CPF_CNPJ) = 14
            SET @COEFICIENTE_TMP = 2
        SET @I = @I - 1
    END
 
    SET @VALOR_TMP = 11 - (@TOTAL_TMP % 11)
 
    IF (@VALOR_TMP >= 10)
        SET @VALOR_TMP = 0
 
    IF @J = 1
        SET @VALOR1 = @VALOR_TMP
    ELSE
        SET @VALOR2 = @VALOR_TMP
    SET @J = @J + 1
END


SELECT @RESULTADO =
    CASE WHEN @VALOR1 = @DIGITO1 AND @VALOR2 = @DIGITO2
        THEN 'Válido'
        ELSE 'Inválido'
    END

     RETURN @RESULTADO

END

Nenhum comentário:

Postar um comentário