Como funciona um gerador de CPF (apenas o conceito)
As pessoas vem reclamando que no TabNews não tem posts técnicos, então resolvi fazer um só para testar a recepção
A Anatomia de um CPF
Um CPF tem uma anatomia bem simples: ABC.DEF.GHR-XY
Explicando a notação:
| Dígito | Significado |
|---|---|
| A-H | São número aleatórios de 0 a 9 cada letra |
| R | A região de emissão do CPF |
| X | É o primeiro dígito verificador |
| Y | É o segundo dígito verificador |
Para R os valores estão abaixo
| Dígito R | Significado |
|---|---|
| 0 | Rio Grande do Sul |
| 1 | Distrito Federal, Goiás, Mato Grosso, Mato Grosso do Sul, Tocantins |
| 2 | Pará, Amazonas, Acre, Amapá, Rondônia, Roraima |
| 3 | Ceará, Maranhão, Piauí |
| 4 | Pernambuco, Rio Grande do Norte, Paraíba, Alagoas |
| 5 | Bahia, Sergipe |
| 6 | Minas Gerais |
| 7 | Rio de Janeiro, Espírito Santo |
| 8 | São Paulo |
| 9 | Paraná, Santa Catarina |
Regras
-
Os primeiros nove dígitos não podem ser iguais, na prática isso significa que se R for 6, ao menos 1 dígito A precisa ser diferente de 6
-
X e Y são calculados
Cálculo de X
-
Multiplique os valores de 10 até 2 em ordem:
(A×10)+(B×9)+(C×8)+(D×7)+(E×6)+(F×5)+(G×4)+(H×3)+(R×2) -
Divide a soma do passo 1 por 11
-
Analise o resultado
- Se o resto da divisão for 0 ou 1, X será 0
- Caso contrário será 11 − resto
Cálculo de Y
-
É basicamente o mesmo cálculo mas com X também, então de 11 a 2:
(A×11)+(B×10)+(C×9)+(D×8)+(E×7)+(F×6)+(G×5)+(H×4)+(R×3)+(X×2) -
Divide a soma do passo 1 por 11
-
Analise o resultado
- Se o resto da divisão for 0 ou 1, Y será 0
- Caso contrário será 11 − resto
Resumo
- Escolhe um número de 0 a 9 chamamos de R
- Escolhe 8 digitos de 0 a 9 sendo pelo menos um deles diferentes de R
- Coloque os 8 dígitos antes de R
- Calcule X e coloque após R
- Calcule Y e coloque após X
Conclusão
Parece uma coisa meio simples e até inútil mas saber disso funciona para gerar qualquer padrão de identificador você pode usar o mesmo pincípio para identificar de que cidade é um cliente do seu SaaS usando esse algoritmos, inclusive, para saber por qual número dividir é só ver o tamanho do identificador (não é obrigatório mas facilita), e claro isso não mostra que o registro existe, só que é matematicamente válido