Sei sulla pagina 1di 7

Validao de CEP

Essa uma validao simples, que apenas verifica se a quantidade de caracteres est correta e se
todos a string informada possui 8 caracteres numricos. Para uma validao mais forte, sugiro que
seja adquirido uma base junto aos Correios e a funo de validao dever realizar uma consulta
nessa base para confirmar os dados e a veracidade do CEP.
Transact-SQL

1 CREATE FUNCTION [dbo].[fncVerifica_Cep](@Nr_Cep CHAR(8))


2 RETURNS BIT
3 AS
4 BEGIN
5
6 DECLARE @chr CHAR, @tamanho INT
7
8 -- Verifica se possui 8 caracteres
9 IF (LEN(@Nr_Cep) < 8)
1 RETURN 0
0
1 WHILE (LEN(@Nr_Cep) > 0)
1 BEGIN
1
2 SELECT @tamanho = LEN(@Nr_Cep), @chr = LEFT(@Nr_Cep,1)
1
3 -- Verifica se o nmero informado possui apenas nmeros
1 IF CHARINDEX(@chr,'0123456789') = 0
4 BEGIN
1 RETURN 0
5 BREAK
1 END
6
1 SET @Nr_Cep = STUFF(@Nr_Cep,1,1,'') -- retira o primeiro dgito
7
1 END
8
1 RETURN 1
9
2 END
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0

Validao de e-mail
Essa funo faz uma validao de endereos utilizando uma mscara de validao de e-mails.
Strings como a@a.com ou teste no sero validadas.
Transact-SQL

1
2
3 CREATE FUNCTION dbo.fncValidarEmail(@Ds_Email varchar(max))
4 RETURNS BIT
5 AS BEGIN
6
7 DECLARE @Retorno BIT = 0
8
9 SELECT @Retorno = 1
1 WHERE @Ds_Email NOT LIKE '%[^a-z,0-9,@,.-_]%'
0 AND @Ds_Email LIKE '%_@_%_.__%'
1
1 RETURN @Retorno
1
2 END
1
3

Validao de CPF
Essa funo ir validar a quantidade de dgitos do CPF (precisa ter 11), validar se o CPF informado
no est na lista de CPFs repetidos, mas que passam pelas validaes padro e faz o clculo e
validao do CPF informado para identificar se vlido ou no.

CREATE FUNCTION [dbo].[fncValida_CPF](


@Nr_Documento VARCHAR(11)
)
RETURNS BIT -- 1 = vlido, 0 = invlido
WITH SCHEMABINDING
BEGIN

DECLARE
@Contador_1 INT,
@Contador_2 INT,
@Digito_1 INT,
@Digito_2 INT,
@Nr_Documento_Aux VARCHAR(11)

-- Remove espaos em branco


SET @Nr_Documento_Aux = LTRIM(RTRIM(@Nr_Documento))
SET @Digito_1 = 0

-- Remove os nmeros que funcionam como validao para CPF, pois eles
"passam" pela regra de validao
IF (@Nr_Documento_Aux IN ('00000000000', '11111111111', '22222222222',
'33333333333', '44444444444', '55555555555', '66666666666', '77777777777',
'88888888888', '99999999999', '12345678909'))
RETURN 0

-- Verifica se possui apenas 11 caracteres


IF (LEN(@Nr_Documento_Aux) <> 11)
RETURN 0
ELSE
BEGIN

-- Clculo do segundo dgito


SET @Nr_Documento_Aux = SUBSTRING(@Nr_Documento_Aux, 1, 9)

SET @Contador_1 = 2

WHILE (@Contador_1 <= 10)


BEGIN
SET @Digito_1 = @Digito_1 + (@Contador_1 *
CAST(SUBSTRING(@Nr_Documento_Aux, 11 - @Contador_1, 1) as int))
SET @Contador_1 = @Contador_1 + 1
end

SET @Digito_1 = @Digito_1 - (@Digito_1/11)*11

IF (@Digito_1 <= 1)
SET @Digito_1 = 0
ELSE
SET @Digito_1 = 11 - @Digito_1

SET @Nr_Documento_Aux = @Nr_Documento_Aux + CAST(@Digito_1 AS


VARCHAR(1))

IF (@Nr_Documento_Aux <> SUBSTRING(@Nr_Documento, 1, 10))


RETURN 0
ELSE BEGIN

-- Clculo do segundo dgito


SET @Digito_2 = 0
SET @Contador_2 = 2

WHILE (@Contador_2 <= 11)


BEGIN
SET @Digito_2 = @Digito_2 + (@Contador_2 *
CAST(SUBSTRING(@Nr_Documento_Aux, 12 - @Contador_2, 1) AS INT))
SET @Contador_2 = @Contador_2 + 1
end

SET @Digito_2 = @Digito_2 - (@Digito_2/11)*11

IF (@Digito_2 < 2)
SET @Digito_2 = 0
ELSE
SET @Digito_2 = 11 - @Digito_2

SET @Nr_Documento_Aux = @Nr_Documento_Aux + CAST(@Digito_2 AS


VARCHAR(1))

IF (@Nr_Documento_Aux <> @Nr_Documento)


RETURN 0

END
END

RETURN 1

END

Validao de CPF e CNPJ


Essa funo tem por objetivo, realizar a validao de CPF e CNPJ, utilizando as funes acima
dependendo da quantidade de caracteres do N de documento informado.
CREATE FUNCTION [dbo].[fncValida_Documento] (
@Nr_Documento VARCHAR(14)
)
RETURNS BIT
AS BEGIN

DECLARE @Retorno BIT = 0

IF (LEN(@Nr_Documento) = 11)
BEGIN

-- Valida CPF
IF (@Nr_Documento IN ('00000000000', '11111111111', '22222222222', '33333333333',
'44444444444', '55555555555', '66666666666', '77777777777', '88888888888', '99999999999',
'12345678909'))
SET @Retorno = 0
ELSE
SET @Retorno = CLR.dbo.fncValida_CPF(@Nr_Documento)

END
ELSE BEGIN

-- Valida CNPJ
IF (LEN(@Nr_Documento) = 14)
SET @Retorno = CLR.dbo.fncValida_CNPJ(@Nr_Documento)
ELSE
SET @Retorno = 0

END

RETURN @Retorno

END

Validao de Telefone
Essa funo ir verificar a quantidade de dgitos do telefone e se o nmero informado no
formado apenas por nmeros repetidos.

CREATE FUNCTION [dbo].[fncValida_Telefone] (@Nr_Telefone VARCHAR(15))


RETURNS BIT
AS
BEGIN

DECLARE
@Retorno BIT = 1,
@Nr_Telefone_Valida VARCHAR(15)

-- Verifica se possui caracteres no numricos


SET @Nr_Telefone_Valida = dbo.fncRecupera_Numeros(@Nr_Telefone)

IF (@Nr_Telefone != @Nr_Telefone_Valida)
SET @Retorno = 0

-- Verifica a quantidade de digitos


SET @Nr_Telefone_Valida = (CASE
WHEN LEN(@Nr_Telefone) = 8 THEN @Nr_Telefone
WHEN LEN(@Nr_Telefone) = 9 THEN @Nr_Telefone
WHEN LEN(@Nr_Telefone) = 10 THEN RIGHT(@Nr_Telefone,8)
WHEN LEN(@Nr_Telefone) = 11 THEN RIGHT(@Nr_Telefone,9)
ELSE NULL
END)

-- Verifica se possui apenas nmeros repetidos


IF(RIGHT(@Nr_Telefone_Valida, 8) IN
('99999999','88888888','77777777','66666666','55555555','44444444','33333333','22222222','11111
111','00000000'))
SET @Retorno = 0

-- Verifica se string vazia


IF (@Nr_Telefone_Valida IS NULL)
SET @Retorno = 0
RETURN @Retorno

END

Funo extra
Vocs devem ter notado que a funo para validar telefone possui uma dependncia, que a
fncRecupera_Numeros. Essa funo tem por finalidade, retornar apenas caracteres numricos (0 a
9) e uma string, removendo strings, acentos, caracteres especiais, etc.

RETURNS VARCHAR(500)
BEGIN

DECLARE @startingIndex INT


SET @startingIndex = 0

WHILE (1 = 1)
BEGIN

SET @startingIndex = PATINDEX('%[^0-9]%', @str)


IF @startingIndex <> 0
SET @str = REPLACE(@str, SUBSTRING(@str, @startingIndex, 1), '')
ELSE
BREAK

END

RETURN @str

END

Potrebbero piacerti anche