E tb...

CREATE OR REPLACE FUNCTION "validaCNPJ"(cod_cnpj BIGINT)
RETURNS boolean as $func$
    DECLARE
        valido boolean := false;
        cnpj text;
        combinacao integer[13];
        b integer;
        digVerificador integer;

    BEGIN
        b:=0;
        combinacao[0]:=6;
        combinacao[1]:=5;
        combinacao[2]:=4;
        combinacao[3]:=3;
        combinacao[4]:=2;
        combinacao[5]:=9;
        combinacao[6]:=8;
        combinacao[7]:=7;
        combinacao[8]:=6;
        combinacao[9]:=5;
        combinacao[10]:=4;
        combinacao[11]:=3;
        combinacao[12]:=2;
        cnpj := CAST(cod_cnpj AS TEXT);
        WHILE (length(cnpj) < 14) LOOP
                cnpj := '0'||cnpj;
        END LOOP;

        FOR i IN 1..12 LOOP
               b:= b +(CAST(substr(cnpj,i,1) AS INT)* combinacao[i]);
        END LOOP;

        IF((b % 11) < 2) THEN
            IF(((b % 11) < 2) AND CAST(substr(cnpj,13,1) AS INT) <> 0)
THEN
                RETURN valido;
            ELSE
                valido :=true;
                RETURN valido;
            END IF;
        ELSE
            IF((11-(b % 11)) <> CAST(substr(cnpj,13,1) AS INT)) THEN
                RETURN valido;
            ELSE
                valido:=true;
                RETURN valido;
            END IF;
        END IF;

        b:=0;
        FOR i IN 1..13 LOOP
               b:= b +(CAST(substr(cnpj,i,1) AS INT)* combinacao[i-1]);
        END LOOP;
        IF((b % 11) < 2) THEN
            IF(((b % 11) < 2) AND CAST(substr(cnpj,14,1) AS INT) <> 0)
THEN
                RETURN valido;
            ELSE
                valido :=true;
                RETURN valido;
            END IF;
        ELSE
            IF((11-(b % 11)) <> CAST(substr(cnpj,14,1) AS INT)) THEN
                RETURN valido;
            ELSE
                valido:=true;
                RETURN valido;
            END IF;
        END IF;
    END
$func$ Language 'plpgsql';

2009/5/29 <JUNIN> Trabalhando . . . %Segredos - Frejat% <
[email protected]>

> 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!
>



-- 
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