Manual

do

Maker

.

com

Como validar CPF começado com 0 ?

Como validar CPF começado com 0 ?

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.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.