Manual
do
Maker
.
com
Meus caros, isso têm dado problema. Teve até notícia de pessoas que não conseguiram o auxílio emergencial na pandemia por terem seu CPF começando com 0. O algoritmo é bastante claro e já escrevi alguns artigos relacionados, mostrando como validar CPF em Python usando Onion Omega (escrito em Python, portanto serve para qualquer coisa). Talvez interesse saber que o cartão de crédito também tem validador (inclusive, identificador de bandeira). Já escrevi um validador de cartão de crédito em Python também, aproveite à vontade. Mas o artigo de hoje é para mostrar como validar CPF começado com 0.
Recentemente tivemos esse problema na Digitra.com, uma exchange de cripto global, integrada com a NASDAQ, com bolsa de startups, moeda digital própria (inclusive, criando conta, você recebe uma quantidade de DGTAs de graça - a conta também é de graça e movimentando até um valor X, a taxa é zero). Bem, um dos desenvolvedores tinha um validador que valida CPFs iniciados em zero, mas estava em (eca) java script. Fiz uma migração bem meia-boca (em qualidade de código) para ver isso funcionando em Python. Funcionou perfeitamente - e resolvemos o problema no mesmo dia. Nada como uma equipe top de tecnologia, hum? - E resolvi compartilhar com vocês, para que ninguém passe pelo mesmo susto! Divirtam-se!
import sys
import re
def validateCPF():
text = str(sys.argv[1])
if len(text) < 11:
return "little than eleven"
sanitized = re.sub(r'[^0-9]','',text)
validString = len(sanitized)
if validString < 11:
return "not equal 11"
sum = 0
index = 0
rest = 0
for i in range(0,9):
sum += int(sanitized[i]) * (i+1)
rest = sum % 11
if rest == 10:
rest = 0
if str(rest) != sanitized[9]:
return "digit 9 invalid"
sum = 0
index = 1
for i in sanitized[1:10]:
sum += int(i) * index
index += 1
rest = sum % 11
if rest == 10:
rest = 0
if str(rest) == sanitized[10]:
return "valid"
return "Invalid"
retorno = validateCPF()
print(retorno)
A função se chama validateCPF() e está pegando o valor via argumento de linha de comando. Se quiser receber o parâmetro de outro modo, substitua sys.argv pela origem de entrada. Daí já pode também remover o import sys. O módulo de regex foi incluído para limpar a string, mas dependendo de onde for usado e como o parâmetro (CPF) for recebido, também pode ser eliminado.
A penúltima linha é a chamada da função, que guarda em retorno o valor resultante. Como foi escrito para teste, não está padronizado, mas essas bobeirinhas são simples de ajustar.
Espero que aproveitem, pois é o primeiro código que mostra como validar CPF começado com 0 que vejo!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.