Skip to content

Validador de CPF e gerador de CPF - Projeto em Python utilizando PyQt5 e Qt Designer

Notifications You must be signed in to change notification settings

diegoguedes91/gerador_e_validador_de_cpf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Curso de Python 3 do Básico ao Avançado

Desafio: Criar um gerador e validador de CPF

O programa é capaz de criar um CPF válido ou validar uma entrada de CPF pelo usuário.

Para criar o layout do programa foi utilizado o Qt Designer

imagem do Qt Designer

Após salvar o arquivo deve converter o arquivo gerado em .ui para .py.
No linux utilizei o comando pyuic5 design.ui -o design.py no terminal.
É feito esta conversão de arquivos pois necessita importar a classe Ui_MainWindow gerado pelo Qt Designer.

O modulo valida_cpf é responsável por validar se o CPF é valido ou não, para saber as regras nas quais um CPF é considerado válido acesse o repositório diegoguedes91 / curso_python_validador_de_CPF

import re


def validacpf(cpf):
    cpf = str(cpf)

    cpf = re.sub(r'[^0-9]', '', cpf)

    if not len(cpf) == 11:
        return False

    if cpf == cpf[::-1]:
        return False

    soma = 0
    cpf_temp = ''
    for i, v in enumerate(range(10, 1, -1)):
        mult = v * int(cpf[i])
        soma = soma + mult
        cpf_temp += cpf[i]

    digito = 11 - (soma % 11)

    if digito > 9:
        digito = 0

    cpf_temp = cpf_temp + str(digito)

    soma = 0
    cpf_valido = ''
    for i, v in enumerate(range(11, 1, -1)):
        mult = v * int(cpf_temp[i])
        soma = soma + mult
        cpf_valido += cpf_temp[i]

    validade_digito = 11 - (soma % 11)
    if validade_digito > 9:
        validade_digito = 0

    cpf_valido = cpf_valido + str(validade_digito)

    if cpf == cpf_valido:
        return True
    else:
        return False

Para gerar um CPF foi criado o modulo gera_cpf no qual gera 11 digitos aleatorios e valida os numeros no modulo validacpf, o geracpf só retorna com a informação se o numero estiver válido, caso contrario é gerado novamente um novo grupo de digitos.

from random import randint
from valida_cpf import validacpf

def geracpf():
    numero = str(randint(10000000000, 99999999999))

    while validacpf(numero) == False:
        numero = str(randint(10000000000, 99999999999))

    return numero

Por fim temos o modulo app que tem a classe GeraValidaCPF responsável por gerar as informações e executar o programa:

import sys
from valida_cpf import validacpf
from gera_cpf import geracpf
from PyQt5.QtWidgets import QApplication, QMainWindow
import design

class GeraValidaCPF(design.Ui_MainWindow, QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        super().setupUi(self)

        self.btngeracpf.clicked.connect(self.gera_cpf)
        self.btnvalidacpf.clicked.connect(self.valida_cpf)

Na classe GeraValidaCPF temos as funções:

  1. gera_cpf

Ao clicar no botão Gerar é inserido na label o valor gerado pela função geracpf do modulo gera_cpf.

  def gera_cpf(self):
        self.labelretorno.setText(str(geracpf()))

imagem do gerador de CPF

  1. valida_cpf

Ao inserir um CPF e clicar no botão Validar é chamado a função validacpf do modulo valida_cpf.

def valida_cpf(self):
        cpf = self.inputvalidacpf.text()
        if validacpf(cpf) == True:
            self.labelretorno.setText(str('CPF válido!'))
        else:
            self.labelretorno.setText(str('CPF inválido!'))

Se a função retornar False quer dizer que o CPF é inválido.

imagem do CPF inválido

Se a função retornar True quer dizer que o CPF é válido.

imagem do CPF válido

Para executar e abrir a aplicação:

if __name__ == '__main__':
    qt = QApplication(sys.argv)
    gera_valida_cpf = GeraValidaCPF()
    gera_valida_cpf.show()
    qt.exec_()

About

Validador de CPF e gerador de CPF - Projeto em Python utilizando PyQt5 e Qt Designer

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages