A Matemática do CPF.

luannzin
2 min readMar 6, 2024

--

A Matemática está presente em várias coisas naturais para o nosso dia-a-dia.

Hoje eu vou explicar como funciona a geração e validação de um CPF.

Fórmula

Os primeiros oito dígitos, são os números base do CPF, que são definidos pela Receita Federal.

O nono dígito, define a Região Fiscal responsável pela inscrição.

O penúltimo,é o dígito verificador dos nove primeiros.

O último, é o dígito verificador dos noves anteriores a ele.

Simplificando

Os 8 primeiros números podem ser aleatórios (123.456.78x-xx ou 000.000.00x-xx), o que realmente importa são os próximos 3.

Nono Digito

1 — DF, GO, MS, MT e TO
2 — AC, AM, AP, PA, RO e RR
3 — CE, MA e PI
4 — AL, PB, PE, RN
5 — BA e SE
6 — MG
7 — ES e RJ
8 — SP
9 — PR e SC
0 — RS

Segundo essa tabela, o seu nono digito indica qual Região Fiscal é responsável por ele. (Faz o teste com o seu CPF. 😉)

Décimo Digito

Esse é o nosso primeiro verificador, e ele usa a seguinte fórmula:

Os nove primeiros números são ordenadamente multiplicados pela sequência 10, 9, 8, 7, 6, 5, 4, 3, 2 (o primeiro por 10, o segundo por 9, e assim sucessivamente))

Em seguida, você soma os resultados e calcula o resto da divisão dessa soma por 11.

Ex:

Imagine que a soma total foi 162.

162 % 11 = 8

O resto da divisão.

Se esse resto for 0 ou 1, então o digito deve ser 0.

Caso contrário, o digito é (11 — resto).

Ex:

11–8 = 3

O nosso décimo digito, seria 3.

Décimo Primeiro Digito

Para esse Digito, a fórmula funciona da mesma maneira, mas ele usa os 9 números antes dele.

Ou seja, agora o nosso primeiro digito verificador também entra nessa conta.

E com isso, mesmo com apenas uma caneta e um pedaço de papel, você já consegue gerar CPFs válidos manualmente.

Automatização

E para testar essa lógica e as fórmulas, eu fiz um gerador de CPF extremamente simples.

👉 https://cpf.social/ 👈

Aqui está o repositório:

👉 https://github.com/luannzin/cpf-social 👈

E aqui está o algoritmo de geração:

👉 https://github.com/luannzin/cpf-social/blob/main/app/helpers/generateCpf.ts 👈

O projeto é um MVP e Open Source, então qualquer ideia é extremamente bem-vinda.

Farei um post sobre o Algoritmo de Luhn, então fiquem preparados. 👑

Siga meu Github para os meus próximos projetos.

👉 https://github.com/luannzin 👈

--

--