Durante uma aula da faculdade o professor disse que um CPF segue uma lógica matemática, validando os últimos números do mesmo (os dígitos verificadores), ao contrário do que eu imaginava, de que os números seriam completamente aleatórios, sem nenhuma regra por trás deles.

Tendo isso em mente, fui buscar informações sobre como essa validação acontecia e descobri que ela é uma relação de de soma entre a multiplicação de cada dígito pela sua posição inversa na sequência, o resto da divisão por 11 deste valor, e por fim, a subtração de 11 por ele, resultando no digíto.

Como talvez essa definição não tenha ficado um tanto clara, vou deixar um exemplo prático:

Como validar um CPF com base nos seus dígitos verificadores

CPF de exemplo: 145.382.206-20

Calculando o PRIMEIRO digito deste CPF:

Dígito X Resultado
1 10 1
4 9 36
5 8 40
3 7 21
8 6 48
2 5 10
2 4 8
0 3 0
6 2 1

Somamos os valores:

10+36+40+21+48+10+8+0+12 = 185

Obtemos o resto da divisão por 11:

185 % 11 = 9

Subtraímos 9 de 11:

11 - 9 = 2 Este é nosso primeiro dígito


Calculando o SEGUNDO digito de um CPF:

Dígito X Resultado
1 11 11
4 10 40
5 9 45
3 8 24
8 7 56
2 6 12
2 5 10
0 4 0
6 3 18
2 2 4

Somamos os valores:

11+40+45+24+56+12+10+0+18+4 = 220

Obtemos o resto da divisão por 11:

220 % 11 = 0

Subtraímos 0 de 11:

11 - 0 = 11

Como 11 é maior que 10, então o último dígito é 0;


Como a minha faculdade adota a linguagem C para as disciplinas introdutórias de programação, eu logo pensei em colocar este algoritmo em prática com ela.

Neste repositório você pode ver o código completo e a forma de utilizá-lo.

Em breve pretendo trazer uma versão em JavaScript e publicá-la no NPM.

Espero que gostem!