MirrorAPI/actions/validations/cnpj.py

35 lines
978 B
Python

import re
class CNPJ:
@staticmethod
def validate(data: str) -> bool:
# Remove caracteres não numéricos
data = re.sub(r'\D', '', data)
# Verifica se tem 14 dígitos
if len(data) != 14:
return False
# CNPJs com todos os dígitos iguais são inválidos
if data == data[0] * 14:
return False
# Calcula os dois dígitos verificadores
def calcular_digito(data, peso):
soma = sum(int(a) * b for a, b in zip(data, peso))
resto = soma % 11
return '0' if resto < 2 else str(11 - resto)
# Primeiro dígito verificador
peso1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
digito1 = calcular_digito(data[:12], peso1)
# Segundo dígito verificador
peso2 = [6] + peso1
digito2 = calcular_digito(data[:12] + digito1, peso2)
# Verifica se os dígitos batem
return data[-2:] == digito1 + digito2