@acwoss/

GlumKaleidoscopicInfinity

Python

No description

fork
loading
Files
  • main.py
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import re

def validate(cpf: str) -> bool:
    """ Valida o CPF """
    # Verifica a formatação do CPF
    if not re.match(r'\d{3}\.\d{3}\.\d{3}-\d{2}', cpf):
        return False
    numbers = [int(digit) for digit in cpf if digit.isdigit()]
    # Verifica se o CPF possui 11 números:
    if len(numbers) != 11:
        return False
    # Validação do primeiro dígito verificador:
    sum_of_products = sum(a*b for a, b in zip(numbers[0:9], range(10, 1, -1)))
    expected_digit = (sum_of_products * 10 % 11) % 10
    if numbers[9] != expected_digit:
        return False
    # Validação do segundo dígito verificador:
    sum_of_products = sum(a*b for a, b in zip(numbers[0:10], range(11, 1, -1)))
    expected_digit = (sum_of_products * 10 % 11) % 10
    if numbers[10] != expected_digit:
        return False
    return True

try:
    cpf = input('Informe o CPF: ')
    assert validate(cpf), 'O CPF informado não é válido'
except AssertionError as error:
    print(error)