monitoring-api/actions/validations/cpf.py
2025-10-06 09:30:41 -03:00

34 lines
No EOL
971 B
Python

import re
class CPF:
@staticmethod
def is_valid_cpf(data: str) -> bool:
# Remove caracteres não numéricos
data = re.sub(r'\D', '', data)
# Verifica se tem 11 dígitos
if len(data) != 11:
return False
# CPFs com todos os dígitos iguais são inválidos
if data == data[0] * 11:
return False
# Calcula o primeiro e segundo dígitos verificadores
def calcular_digito(digitos, peso):
soma = sum(int(a) * b for a, b in zip(digitos, peso))
resto = soma % 11
return '0' if resto < 2 else str(11 - resto)
# Primeiro dígito verificador
peso1 = range(10, 1, -1)
digito1 = calcular_digito(data[:9], peso1)
# Segundo dígito verificador
peso2 = range(11, 1, -1)
digito2 = calcular_digito(data[:10], peso2)
# Verifica se os dígitos batem
return data[-2:] == digito1 + digito2