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