dicas show delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais
sombra
Artigos Show Delphi

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais
sombra
iniciantes show delphi

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais
sombra
downloads show delphi

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
sombra
voltar

PARA QUEM GOSTA DE DELPHI

Stored Procedure para a validação de CPF SQL Firebird

Fala galera de Delphi, tudo beleza?

hoje vamos abrir um parênteses para uma dica excelente de SQL, para quem trabalha com Firebird.

Diversas vezes precisei validar CPFs de base de dados, mas sempre precisando fazer a validação
via aplicação, o que acabava aumentando o tempo necessário do trabalho além de não poder
resolver tudo via banco de dados.

Pesquisei e felizmente encontrei uma alternativa para fazer a validação diretamente
via SQL. A solução foi criar uma Stored Procedure que é a responsável pela validação!

Esta versão já está validada para Firebird 3.0 é não faz uso de UDFs!

Vamos ao código!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
SET TERM ^ ;
 
CREATE OR ALTER PROCEDURE UTIL_IS_VALID_CPF (
CPF CHAR(11) CHARACTER SET WIN1252)
RETURNS (
VALIDO SMALLINT)
AS
DECLARE variable SOMA INTEGER;
DECLARE variable RESTO SMALLINT;
DECLARE variable CONT SMALLINT;
BEGIN
-- código da comunidade show delphi, adaptado por Giovani Da Cruz
 
/* DIGITOS IDENTICOS */
IF (
(CHARACTER_LENGTH(CPF) <> 11) OR
(CPF = '00000000000') OR (CPF = '11111111111') OR
(CPF = '22222222222') OR (CPF = '33333333333') OR (CPF = '44444444444')OR
(CPF = '55555555555') OR (CPF = '66666666666') OR (CPF = '77777777777')OR
(CPF = '88888888888') OR (CPF = '99999999999')
) THEN
BEGIN
VALIDO = 0;
 
SUSPEND;
Exit;
END
 
/* INICIALIZA VARIÁVEIS */
CONT=1;
SOMA=0;
RESTO=0;
 
/* SOMA OS DÍGITOS MULTIPLICADOS E CALCULA O RESTO */
WHILE (CONT<=9) DO
BEGIN
SOMA = SOMA + CAST( SUBSTRING(CPF FROM :CONT FOR 1) AS SMALLINT) * (11 - :CONT);
CONT = CONT + 1;
END
RESTO=MOD(SOMA,11);
 
/* TRATA O CASO DE RESTO INFERIOR A 2 */
IF ( (RESTO < 2) AND (SUBSTRING(CPF FROM 10 FOR 1) <> '0') )THEN
BEGIN
VALIDO = 0;
END
ELSE
BEGIN
/*VERIFICA SE O PRIMEIRO DIGITO CONFERE*/
IF (11-:RESTO<>CAST(SUBSTRING(CPF FROM 10 FOR 1) AS INTEGER)) THEN
BEGIN
VALIDO=0;
END
ELSE
BEGIN
CONT=1;
SOMA=0;
 
/*MULTIPLICA, SOMA E CALCULA O RESTO*/
WHILE (CONT<=10) DO
BEGIN
SOMA = SOMA + CAST(SUBSTRING(CPF FROM :CONT FOR 1) AS SMALLINT) * (12-:CONT);
CONT = CONT + 1;
END
RESTO = MOD(:SOMA,11);
 
/*VERIFICA O SEGUNDO DÍGITO*/
IF ((RESTO < 2) AND (SUBSTRING(CPF FROM 11 FOR 1) <> '0')) THEN
BEGIN
VALIDO=0;
END
ELSE
BEGIN
IF (11 - :RESTO <> CAST(SUBSTRING(CPF FROM 11 FOR 1) AS INTEGER)) THEN
BEGIN
VALIDO = 0;
END
ELSE
BEGIN
VALIDO = 1;
END
END
END
END
 
SUSPEND;
END
^
 
SET TERM ; ^

A stored procedure foi montada com base no seguinte post:
https://www.devmedia.com.br/forum/stored-procedure-para-validacao-de-cpf/51957

No post Mordred ([email protected]), publicou uma versão interessante, com base nesta versão
realizei mudanças importantes:

– Removi dependências de UDFs;
– Identeção (No padrão que uso – similar ao DELPHI)
– Alteração do retorno de char para smallint
– Ajustado para a compilação em Firebird 3.0

Maravilha, vamos ao exemplo de uso!

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
 
-- válido gerado pelo gerador de cpf do show delphi
(SELECT y.valido FROM util_is_valid_cpf('47570414039') y),
 
-- inválido
(SELECT y.valido FROM util_is_valid_cpf('00000000000') y),
 
-- in
(SELECT y.valido FROM util_is_valid_cpf('01294580043') y)
 
FROM rdb$database

Assim você pode facilitar as suas validação diretamente via SQL.

Aproveite e conheça o gerador de CNPJ e CPF do Show Delphi para aprimorar
seus testes. Visite: https://showdelphi.com.br/gerador-de-cpf-e-cnpj/

Espero que seja útil a todos!

Dúvidas ou sugestões? Deixe o seu comentário!

  • Giovani Da Cruz
  • 0 comentários
  • 28 de agosto de 2019

Deixe um comentário

Ir ao topo

© 2024 Infus Soluções em Tecnologia - Todos os Direitos Reservados