quinta-feira, 8 de janeiro de 2015

Cálculo do Digito Verificador CPF [Oracle];

Boa tarde!

Em um post do fórum glufke.net estava rolando um assunto sobre como calcular o Digito Verificador do CPF, e um dos usuários desenvolveu a seguinte query que achei muito legal.


select cpf, cast(dig1 || dig2 as varchar2(2)) DigitoVerificador
  from dual
model dimension by (1 as x)
measures (lpad(285757824, 10, '0') as cpf, --O CPF deve ser incluso aqui e sem o digito verificador (Substituir pelo número 285757824)
          0 as m1, 
          0 as dig1, 
          0 as m2, 
          0 as dig2, 
          cast(null as varchar2(11)) as cpfdv)
rules iterate (11)
(  m1[1] = m1[1] + (nvl(substr(cpf[1], iteration_number + 1, 1), 0) * (11 - iteration_number)),
  dig1[1] = case when mod(m1[1], 11) < 2 then 0 else 11 - mod(m1[1], 11) end,
cpfdv[1] = cpf[1] || dig1[1],
    m2[1] = m2[1] + (nvl(substr(cpfdv[1], iteration_number + 1, 1), 0) * (12 - iteration_number)),
  dig2[1] = case when mod(m2[1], 11) < 2 then 0 else 11 - mod(m2[1], 11) end);

O Retorno da consulta é justamente o digito verificador do seu CPF!

Valeu,
Bruno Duarte

Nenhum comentário:

Postar um comentário