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

Responder a