O Cadastro de Pessoas Físicas (CPF) é um banco de dados gerenciado pela Receita Federal, que armazena informações cadastrais de contribuintes obrigados à inscrição no CPF, ou de cidadãos que se inscreveram voluntariamente. (Meu CPF).
O Anexo II do Ato Declaratório Executivo COFIS nº 41 Maio de 2017 diz o seguinte na página 12 para verificar se dígito verificador é válido: “O dígito verificador do CPF é baseado no cálculo do módulo 11, e corresponde aos 2 últimos dígitos do CPF, o restante dos dígitos são a base para cálculo dos dígitos verificadores. No caso do CPF, o DV módulo 11 corresponde ao resto da divisão por 11 do somatório da multiplicação de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3, 2, 1 e 0, a partir da unidade. O resto 10 é considerado 0”.
O código-fonte da função, o arquivo Makefile,
e o comando CREATE FUNCTION, que vincula a função
C à função SQL,
encontram-se na página
Validação do CPF em C no GitLab.
Criação e teste da função no psql:
postgres=# CREATE FUNCTION rfb_cpf(text) RETURNS boolean
AS '$libdir/udf/rfb_cpf', 'rfb_cpf'
LANGUAGE C STRICT;
CREATE FUNCTION
postgres=# \pset null <nulo>
Null display is "<nulo>".
postgres=# SELECT rfb_cpf(NULL);
rfb_cpf
---------
<nulo>
(1 linha)
postgres=# SELECT rfb_cpf('28001238938');
rfb_cpf
---------
t
(1 linha)
O número do CPF utilizado para testar a função é o mesmo mostrado no Anexo II referenciado acima.
Veja também Cálculo dos digitos de verificação - CPF CNPJ CAEPF.