from tkinter import *
root = Tk()
root.geometry("500x300")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Validar CPF")
titulo = Label(root, text="Validar CPF", font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.25, rely=0.05)
texto_sub1 = Label(root, text="CPF para ser validado:", font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.3)
CPF = StringVar()
CPF_entrada = Entry(root, textvariable=CPF, font=("Arial", 12, "bold"), bg="white", fg="blue", justify='center')
CPF_entrada.place(relx=0.6, rely=0.31, relwidth=0.3)
def calcular_digito(cpf, peso):
soma = sum(int(cpf[i]) * (peso - i) for i in range(peso - 1))
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def validar_cpf():
cpf = CPF.get()
cpf = re.sub(r'\D', '', cpf)
if len(cpf) != 11 or cpf == cpf[0] * 11:
resultado_texto.config(text=f"O CPF {cpf} é inválido, tente novamente.", fg="red")
return
digito1 = calcular_digito(cpf, 10)
digito2 = calcular_digito(cpf, 11)
if cpf[-2:] == f"{digito1}{digito2}":
resultado = f"O CPF {cpf} é válido!"
cor = "green"
else:
resultado = f"O CPF {cpf} é inválido, tente novamente."
cor = "red"
estados = {
'1': "DF, GO, MT, MS, TO",
'2': "PA, AM, AC, AP, RO, RR",
'3': "CE, MA, PI",
'4': "PE, RN, PB, AL",
'5': "BA, SE",
'6': "MG",
'7': "RJ, ES",
'8': "SP",
'9': "PR, SC",
'0': "RS"
}
estado_origem = estados.get(cpf[8], "desconhecido")
resultado += f"\nOrigem: {estado_origem}"
resultado_texto.config(text=resultado, fg=cor)
def limpar():
CPF_entrada.delete(0, END)
resultado_texto.config(text="")
but1 = Button(root, text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=validar_cpf)
but1.place(relx=0.1, rely=0.45, relwidth=0.25, relheight=0.1)
but_limpar = Button(root, text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.45, relwidth=0.25, relheight=0.1)
but_sair = Button(root, text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.45, relwidth=0.25, relheight=0.1)
resultado_texto = Label(root, text="", font=("Arial", 12, "bold"), bg="#cfe2f3")
resultado_texto.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.26)
root.mainloop()
Comentários
Enviar um comentário