Executando verificação de segurança...
2

Verificador de dígitos verificadores de CPF [SCRIPT]

🚀 Projeto simples, mas com propósito!

Nos últimos dias, durante o curso de Cibersegurança que estou fazendo, surgiu uma discussão sobre criptografia e validação de dados. Isso me fez refletir sobre como algumas aplicações por aí sequer fazem o básico: validar corretamente um CPF.

👉 Por curiosidade, pesquisei por 2 minutos sobre como funciona a validação dos dígitos verificadores de um CPF… e meia hora depois já tinha um pequeno script Python pronto!

A ideia é bem simples: uma validação mínima e prévia para garantir que o CPF informado ao menos tenha um formato matematicamente válido (antes de qualquer verificação mais profunda em bases de dados, por exemplo).

Repositório: https://github.com/Kelabr/verificacao_digito_cpf

💬 Agora, um pedidoparaa quem quiser ajudar:

👉 Acabei de escrever o README e a LICENSE do projeto, e gostaria muito de ouvir de vocês:

✅ O que acham da estrutura?

✅ Faltou algo que deveria ter?

✅ Algo que eu poderia melhorar para deixar o repositório mais claro e profissional?

PS: Sei que o código não é o mais polido, mas quis fazer da forma mais simples e seguindo o mais preciso possível as instruções do post que usei de referência.

Referência: https://www.campuscode.com.br/conteudos/o-calculo-do-digito-verificador-do-cpf-e-do-cnpj

Qualquer feedback é super bem-vindo! 🙏

Carregando publicação patrocinada...
2

Eu uso essa função php abaixo, é uma forma bem enxuta de validar. Está legível? não, fica muito difícil dar manutenção, mas acerdito que uma validação desse tipo raramente vai mudar, e se mudar é mais facil simplesmente refazer.

Consegui essa validação de algum repositório publico aleatório a mais de 8 anos atrás e nunca tive problemas

public function validate(string $attribute, mixed $value, Closure $fail): void
{
    $c = preg_replace('/\D/', '', $value);

    if (strlen($c) != 11 || preg_match("/^{$c[0]}{11}$/", $c)) return false;

    for ($s = 10, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);

    if ($c[9] != ((($n %= 11) < 2) ? 0 : 11 - $n)) return false;

    for ($s = 11, $n = 0, $i = 0; $s >= 2; $n += $c[$i++] * $s--);

    if ($c[10] != ((($n %= 11) < 2) ? 0 : 11 - $n)) return false
}
1
2
1
2
1

Po man, fica tranquilo, qualquer conhecimento é válido, eu fiz apenas do cpf porque eu não me interessei tanto pelo cnpj. Mas com essa sua informação, vou ficar ligado. muito obrigado!!