CREATE OR REPLACE FUNCTION public."validaCPF"(cod_cpf BIGINT)
RETURNS boolean as $func$
DECLARE
valido boolean := false;
cpf text;
cont integer;
b integer;
BEGIN
b:=0;
cont:=11;
IF(cod_cpf = 11111111111 OR
cod_cpf = 22222222222 OR
cod_cpf = 33333333333 OR
cod_cpf = 44444444444 OR
cod_cpf = 55555555555 OR
cod_cpf = 66666666666 OR
cod_cpf = 77777777777 OR
cod_cpf = 88888888888 OR
cod_cpf = 99999999999) THEN
RETURN valido;
END IF;
cpf := CAST(cod_cpf AS TEXT);
WHILE (length(cpf) < 11) LOOP
cpf := '0'||cpf;
END LOOP;
FOR i IN 1..9 LOOP
cont := cont - 1;
b := b + (CAST(substr(cpf,i,1) AS INT) * cont);
END LOOP;
IF((b % 11) < 2) THEN
IF(((b % 11) < 2) AND CAST(substr(cpf,10,1) AS INT) <> 0)
THEN
RETURN valido;
ELSE
valido :=true;
RETURN valido;
END IF;
ELSE
IF((11-(b % 11)) <> CAST(substr(cpf,10,1) AS INT)) THEN
RETURN valido;
ELSE
valido:=true;
RETURN valido;
END IF;
END IF;
b:=0;
cont:=11;
FOR i IN 1..10 LOOP
b := b + (CAST(substr(cpf,i,1) AS INT) * cont);
cont := cont - 1;
END LOOP;
IF((b % 11) < 2) THEN
IF(((b % 11) < 2) AND CAST(substr(cpf,11,1) AS INT) <> 0)
THEN
RETURN valido;
ELSE
valido :=true;
RETURN valido;
END IF;
ELSE
IF((11-(b % 11)) <> CAST(substr(cpf,11,1) AS INT)) THEN
RETURN valido;
ELSE
valido:=true;
RETURN valido;
END IF;
END IF;
END
$func$ Language 'plpgsql';
2009/5/29 Euler Taveira de Oliveira <[email protected]>
> Olá pessoal,
>
> Fiz uma função [1] que valida um CPF utilizando apenas SQL. Divirtam-se! ;)
>
>
> [1] http://timbira.com/pg/cpf.sql
>
>
> --
> Euler Taveira de Oliveira
> http://www.timbira.com/
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
--
VALTER CEZAR PRADO JUNIOR
GRADUADO EM CIÊNCIA DA COMPUTAÇÃO - UFOP
ANALISTA DE SISTEMAS - BYSAT
DBA / PROJETISTA DE SISTEMAS - PBH
INTEGRANTE DA COMUNIDADE PGBR-GERAL
TEL.: (31) 8402-2215
Sem saber como fazer ele fez!
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral