DEV Community

Cover image for Validar CPF facilmente em Kotlin
Leonardo Colman Lopes
Leonardo Colman Lopes

Posted on • Edited on

4 3

Validar CPF facilmente em Kotlin

NL;NL

Desenvolvi a biblioteca SimpleCPFValidator para facilitar validações de CPF em Kotlin.

Olá, Kotliners!

Todo novo cadastro de usuário em todo aplicativo segue sempre o mesmo padrão. Pedimos nome, data de nascimento e CPF de nossos queridos usuários quase que rotineiramente.

Quem já brincou de validar CPF sabe que é uma chatice contar todos os números, fazer valer com o digito verificador e zás e zás...

A validação

As regras de validação em si são bem simples, e estão facilmente disponibilizadas pela web, além das normas oficiais da receita.

  1. CPFs com números repetidos (111.111.111-11, 222.222.222-22, ... 999.999.999-99) não são válidos
  2. O CPF 000.000.001-91 é válido apenas para representar pessoas sem CPF
  3. O cálculo maluco de digito verificador

Esta última regra é mais chata de entender. Este artigo do Só Matemática explica bem como funciona, mas se tiver interesse, leia:

O número do CPF é escrito na forma ABCDEFGHI/JK

O J e o K são o 1̣° e 2° dígitos verificadores

Para obter J multiplicamos A, B, C, D, E, F, G, H e I 
pelas constantes correspondentes:
| A   | B  | C  | D  | E  | F  | G  | H  | I  |
| 10x | 9x | 8x | 7x | 6x | 5x | 4x | 3x | 2x |
O resultado de 10A + 9B + ... + 2I é então dividido por 11, e
o valor que RESTAR da divisão será utilizado. Se o resto for
0 ou 1, J = 0. Caso contrário, J = 11 - resto

Para obter K. seguimos a mesma regra, porém com J no final 
da tabela, e começaremos a conta a partir de 11:
| A   | B   | C  | D  | E  | F  | G  | H  | I  | J  |
| 11x | 10x | 9x | 8x | 7x | 6x | 5x | 4x | 3x | 2x |
O resultado de 11A + ... + 2J é então dividido 
por 11, e a regra do resto será a mesma que o J.
Enter fullscreen mode Exit fullscreen mode

É fácil, não?

As regras são simples, não são? Fáceis de entender do ponto de vista matemático e do ponto de vista de código. Então Por que é sempre tão chato implementar isso? Ou copiamos códigos de outros projetos, ou escrevemos um espaguete para seguir essas regras. Testar é complicado, e no final fica uma gororoba.

Essa gororoba precisa de manutenção, no entanto, e estará amarrada no nosso projeto pra sempre. Não queremos isso!

A maneira fácil

Em Kotlin temos a tendência de evitar boilerplates, e não carregar nosso código de tanta coisa.

Com isso em mente, desenvolvi a biblioteca open source SimpleCPFValidator. Ela colocará em seu projeto alguns utilitários para validação de CPF.

Busquei as regras originais para validação, e desenvolvi funções de extensão em cima disso:

val userCpf = userCpf.text
if(userCpf.isCpf()) {
    // Is CPF!
}
Enter fullscreen mode Exit fullscreen mode

E simples assim, seu código conhece as regras de validação de CPF!

Por padrão, os caracteres . e - são retirados da String (permitindo o formato 123.456.789-11, por exemplo), mas isso pode ser modificado através do parâmetro charactersToIgnore:

"123.456.789/11".isCpf(charactersToIgnore = listOf('.', '/'))
Enter fullscreen mode Exit fullscreen mode

Para utilizar essa lib em seu projeto,coloque em seu build.gradle:

implementation("br.com.colman.simplecpfvalidator:simple-cpf-validator:{version}")
Enter fullscreen mode Exit fullscreen mode

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay