[PITCH] A Matemática do CPF.
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 numeros 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.
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. 👑