A validação de CPF é uma tarefa crítica em sistemas de cadastro e controle de acesso. Integrar essa validação diretamente com um banco de dados SQLite permite garantir a integridade dos dados desde o momento da entrada, evitando registros duplicados ou inválidos. Este método é eficaz porque combina a verificação algorítmica do CPF com a persistência em um banco de dados local, tudo automatizado em um único script Python.
Primeiro, vamos criar um banco de dados SQLite com uma tabela para armazenar os CPFs validados. Execute o seguinte script para criar o banco e a tabela:
import sqlite3
# Conexão com o banco de dados (ou cria se não existir)
conn = sqlite3.connect('cadastro.db')
cursor = conn.cursor()
# Criar tabela para armazenar CPFs
cursor.execute('''
CREATE TABLE IF NOT EXISTS usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
cpf TEXT UNIQUE NOT NULL,
nome TEXT NOT NULL,
data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
A validação de CPF segue um algoritmo específico que verifica os dois dígitos verificadores. O código abaixo implementa essa validação:
def validar_cpf(cpf):
# Remover caracteres não numéricos
cpf = ''.join(filter(str.isdigit, cpf))
# Verificar se o CPF tem 11 dígitos
if len(cpf) != 11:
return False
# Verificar se todos os dígitos são iguais
if cpf == cpf[0] * 11:
return False
# Calcular o primeiro dígito verificador
soma = sum(int(digit) * (10 - i) for i, digit in enumerate(cpf[:9]))
resto = soma % 11
digito1 = 0 if resto < 2 else 11 - resto
# Calcular o segundo dígito verificador
soma = sum(int(digit) * (11 - i) for i, digit in enumerate(cpf[:10]))
resto = soma % 11
digito2 = 0 if resto < 2 else 11 - resto
# Comparar com os dígitos verificadores do CPF
return digito1 == int(cpf[9]) and digito2 == int(cpf[10])
Agora, vamos integrar a validação com o banco de dados, inserindo apenas CPFs válidos e não duplicados:
def inserir_usuario(cpf, nome):
if not validar_cpf(cpf):
return "CPF inválido"
try:
conn = sqlite3.connect('cadastro.db')
cursor = conn.cursor()
cursor.execute('''
INSERT INTO usuarios (cpf, nome)
VALUES (?, ?)
''', (cpf, nome))
conn.commit()
conn.close()
return "Usuário inserido com sucesso"
except sqlite3.IntegrityError:
return "CPF já cadastrado"
except Exception as e:
return f"Erro: {str(e)}"
Veja como o script funciona na prática:
| CPF de Entrada | Nome | Resultado Esperado |
|---|---|---|
| 123.456.789-09 | João Silva | CPF inválido |
| 529.982.247-25 | Maria Santos | Usuário inserido com sucesso |
| 529.982.247-25 | Ana Costa | CPF já cadastrado |
Aqui está o script completo para testar a integração:
if __name__ == "__main__":
# Testar com CPFs válidos e inválidos
test_cases = [
("123.456.789-09", "João Silva"),
("529.982.247-25", "Maria Santos"),
("111.111.111-11", "Carlos Lima"),
("529.982.247-25", "Ana Costa")
]
for cpf, nome in test_cases:
resultado = inserir_usuario(cpf, nome)
print(f"CPF: {cpf} | Nome: {nome} | Resultado: {resultado}")
Com este método, você automatiza a validação e inserção de CPFs em um banco de dados SQLite, garantindo que apenas registros válidos e únicos sejam armazenados. O script é eficiente, seguro e pode ser facilmente integrado a sistemas maiores de cadastro ou controle de acesso.