Validar documentos fiscais como CPF e CNPJ é uma tarefa essencial para garantir a integridade dos dados em sistemas de cadastro. Neste guia, você aprenderá a criar um script Python eficiente que valida ambos os documentos usando algoritmos matemáticos precisos, eliminando a necessidade de bibliotecas externas e garantindo total controle sobre o processo.
O primeiro passo é criar uma função que possa validar tanto CPF quanto CNPJ. Vamos implementar os algoritmos de validação tradicionais, que verificam os dígitos verificadores de cada documento.
def validate_cpf_cnpj(document):
document = document.replace('.', '').replace('-', '').replace('/', '').strip()
if len(document) == 11:
return validate_cpf(document)
elif len(document) == 14:
return validate_cnpj(document)
else:
return False
def validate_cpf(cpf):
if len(cpf) != 11 or cpf == cpf[0] * 11:
return False
# Cálculo do primeiro dígito verificador
sum_first = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
first_digit = (sum_first * 10) % 11
first_digit = 0 if first_digit == 10 else first_digit
# Cálculo do segundo dígito verificador
sum_second = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
second_digit = (sum_second * 10) % 11
second_digit = 0 if second_digit == 10 else second_digit
return str(first_digit) == cpf[9] and str(second_digit) == cpf[10]
def validate_cnpj(cnpj):
if len(cnpj) != 14 or cnpj == cnpj[0] * 14:
return False
# Cálculo do primeiro dígito verificador
weights1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
sum_first = sum(int(digit) * weight for digit, weight in zip(cnpj[:12], weights1))
first_digit = sum_first % 11
first_digit = 0 if first_digit < 2 else 11 - first_digit
# Cálculo do segundo dígito verificador
weights2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
sum_second = sum(int(digit) * weight for digit, weight in zip(cnpj[:13], weights2))
second_digit = sum_second % 11
second_digit = 0 if second_digit < 2 else 11 - second_digit
return str(first_digit) == cnpj[12] and str(second_digit) == cnpj[13]
Com as funções criadas, você pode validar documentos facilmente. O script aceita formatos com ou sem pontuação e retorna True para documentos válidos e False para inválidos.
if __name__ == "__main__":
documents = [
"123.456.789-09", # CPF inválido
"529.982.247-25", # CPF válido
"12.345.678/0001-95", # CNPJ inválido
"34.567.890/0001-23" # CNPJ válido
]
for doc in documents:
result = validate_cpf_cnpj(doc)
print(f"Documento: {doc} | Válido: {result}")
| Documento de Entrada | Tipo | Válido? |
|---|---|---|
| 529.982.247-25 | CPF | True |
| 123.456.789-09 | CPF | False |
| 34.567.890/0001-23 | CNPJ | True |
| 12.345.678/0001-95 | CNPJ | False |
Com este script Python, você tem uma solução completa e autônoma para validar CPF e CNPJ no mesmo fluxo de código. A implementação direta dos algoritmos de validação garante precisão e elimina dependências externas, permitindo que você integre facilmente esta funcionalidade em seus sistemas de cadastro ou processamento de dados.