Algoritimo de validação de CPF brasileiro –; Cadastro de Pessoa Física
Neste artigo explicarei passo a passo na transformação de um algorítimo de verificação da validade de um CPF para código em PHP.
Se você já conhece o algorítmo e quer ir direto aos códigos disponíveis, clique aqui.
Mas o que é o CPF?
CPF é o acrônimo para Cadastro de Pessoa Física. Ele é um número de documento brasileiro atualmente gerenciado e emitido pela Receita Federal. Todo brasileiro tem o direito (ou o dever) de ter um e somente com ele é possível ter acesso a serviços bancários, matricular-se em cursos de graduação públicos, assumir cargo através de concurso público, ter cartão de crédito, entre outros exemplos.
Composição do CPF
O CPF é composto de onze algarismos, sendo que os ultimos três algarismos possuem significados que explicaremos a seguir.
O nono dígito, lendo da esquerda para a direita, indica a Região Fiscal onde ele foi emitido. Há dez regiões para os algarismo de zero a nove conforme tabela abaixo.
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
Os primeiro oito algarismos são o numero base.
Os ultimos dois algarismo são os dígitos verificadores.
Esses dígitos são gerados a partir de cálculos dos nove primeiros algarismos de acordo com a seguintes regras:
Primeiro Dígito verificador
Para o primeiro dígito, pegamos os 8 primeiros algarismos e multiplicamos cada um deles por um número iniciado em 10 e a medida em que vamos avançando para a direita, diminuimos em 1 esse multiplicador e somamos todos os resultados.
Para melhor entendimento, tomemos 123.456.789-XY como exemplo de CPF a ter o digito XY calculado.
1 x 10 = 10
2 x 9 = 18
3 x 8 = 24
4 x 7 = 28
5 x 6 = 30
6 x 5 = 30
7 x 4 = 28
8 x 3 = 24
9 x 2 = 18
Somando 10 + 18 + 24 + 28 + 30 + 30 + 28 + 24 + 18 temos 210.
Agora, com o total obtido temos duas forma de chegar ao digito verificador.
Método 1
Multiplicamos 210 por 10, dividimos por 11 e pegamos o resto.
Temos então: 210 x 10 = 2.100
2.100 / 11 = 190 com resto 10.
Se o resto for 10 o dígito verificador é zero, do contrário, o resto é o dígito verificador.
No nosso caso, como o resto é igual a 10 o primeiro dígito será 0 (zero).
Método 2
Obtemos o resto da divisão de 210 por 11.
Temos então: 210 / 11 é igual a 19 com resto 1.
Aqui temos uma regra para quando o resto for 0 (zero) ou 1 (um). Quando isso acontece o dígito verificador é zero, do contrário subtraimos o resto de 11 para obter o dígito verificador.
Para o nosso caso, como temos resto 1, o nosso primeiro dígito verificador será 0 (zero).
Segundo dígito verificador
Para obter o segundo dígito verificador, acrescentamos o primeiro dígito verificador aos 9 algarismos iniciais e fazemos novamente o mesmo processo feito para o primeiro dígito, com a diferença de que agora iniciamos a partir do segundo dígito.
Nosso CPF já está com o valor 123.456.789-0X e as operações necessárias estão abaixo.
2 x 10 = 20
3 x 9 = 27
4 x 8 = 32
5 x 7 = 35
6 x 6 = 36
7 x 5 = 35
8 x 4 = 32
9 x 3 = 27
0 x 2 = 0
Somando 20 + 27 + 32 + 35 + 36 + 35 + 32 + 27 + 0 temos 244.
Agora, com o total obtido devemos usar uma das duas formas já explicadas para chegar ao dígito verificador.
Método 1
Multiplicamos 244 por 10, dividimos por 11 e pegamos o resto.
Temos então: 244 x 10 = 2.440
2.440 / 11 = 221 com resto 9.
Se o resto for 10 o dígito verificador é zero, do contrário, o resto é o dígito verificador e no nosso caso temos 9 como segundo dígito verificador.
Método 2
Obtemos o resto da divisão de 244 por 11.
Temos então: 244 / 11 é igual a 22 com resto 2.
Lembrando que temos uma regra para quando o resto for 0 (zero) ou 1 (um) o dígito verificador é zero.
Caso seja maior que 1 subtraimos esse valor de 11 para obter o dígito verificador.
Para o nosso caso, temos 11 –; 2 = 9 como nosso segundo dígito verificador que é o mesmo valor obtido no método 1.
CPF tem um limite para emissão?
Na teoria, podemos ter até 10^8 ou 100.000.000 (cem milhões) de combinações possíveis para cada região. Na prática temos um pouco menos devido ao não uso de algarismos repetidos, por exemplo. Embora pareça um número bem grande, ele deverá ser remodelado em algum momento, já que não pode ser reutilizado mesmo quando uma pessoa falece.
Supondo que já existam na região 8 (estadao de São Paulo) cerca de 40 milhões de CPFs emitidos (não consegui dados fidedignos em 2022 por isso estou usando um número aproximado da população residente que é de 44,5 milhões de pessoas), restariam aproximadamente 60 milhões de CPFs disponíveis. Com a atual taxa de crescimento de CPFs (ano de 2022) em cerca de 600 mil por ano, o sistema deve aguentar pouco menos de 100 anos.
Chegamos aqui ao final da explicação e do exemplo sobre a composição do CPF. O nosso CPF de exemplo ficou como 123.456.789-09. Abaixo temos alguns exemplos de códigos tanto para gerar os dígitos verificadores, quanto para validá-los.
Códigos
Versão PHP.
Versão Javascript.
2 Respostas
[…;] o menor numero de complexidade ciclomática que consegui baseado na explicação presente no artigo Algoritimo de validação de CPF brasileiro – Cadastro de Pessoa Física. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés […;]
[…;] numero de complexidade ciclomática linhas que consegui baseado na explicação presente no artigo Algoritimo de validação de CPF brasileiro – Cadastro de Pessoa Física. Ele tem uma ligeira alteração no momento do cálculo do segundo digitido verificador. Ao invés […;]