import re


def validar_cpf(cpf):
    """Rotina para validação do CPF - Cadastro Nacional
    de Pessoa Física.
    :Return: True or False
    :Parameters:
      - 'cpf': CPF to be validate.
    """
    # Limpando o cpf
    if not cpf.isdigit():
        cpf = re.sub('[^0-9]', '', cpf)

    if len(cpf) != 11 or cpf == cpf[0] * len(cpf):
        return False

    # Pega apenas os 9 primeiros dígitos do CPF e gera os 2 dígitos que faltam
    cpf = list(map(int, cpf))
    novo = cpf[:9]

    while len(novo) < 11:
        r = sum([(len(novo) + 1 - i) * v for i, v in enumerate(novo)]) % 11

        if r > 1:
            f = 11 - r
        else:
            f = 0
        novo.append(f)

    # Se o número gerado coincidir com o número original, é válido
    if novo == cpf:
        return True
    return False