Created
February 18, 2022 16:19
-
-
Save gabriellopesdesouza2002/bdd4ab0e81c065bc0eefa90c90370b07 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
REGRESSIVOS = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]# constante = variável que nunca vai mudar | |
def valida(cnpj): | |
cnpj = apenas_numeros(cnpj) | |
try: | |
if eh_sequencia(cnpj): | |
return False | |
except: | |
return False | |
try: | |
novo_cnpj = calcula_digito(cnpj=cnpj, digito=1) | |
novo_cnpj = calcula_digito(cnpj=novo_cnpj, digito=2) | |
except Exception as e: | |
return False | |
if novo_cnpj == cnpj: | |
return True | |
else: | |
return False | |
def calcula_digito(cnpj, digito): | |
if digito == 1: # se o digito for igual a 1 | |
regressivos = REGRESSIVOS[1:] # começa a contar a partir do 5 = (5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2) e nao do 6 | |
novo_cnpj = cnpj[:-2] | |
elif digito == 2: | |
regressivos = REGRESSIVOS # começa a partir do inicio da lista | |
novo_cnpj = cnpj | |
else: # se nao for nem 1 nem 2 retorna none | |
return None | |
total = 0 # vai pegar a multiplicacao e dela pegar a soma | |
for indice, regressivo in enumerate(regressivos): # vai pegar o indice de cada item e o valor de cada número do regressivo | |
# acessa cada indice do cnpj | |
total += int(cnpj[indice]) * regressivo # vai pegar a multiplicacao e dela pegar a soma | |
digito = 11 - (total % 11) | |
digito = digito if digito <= 9 else 0 | |
# se o digito for menor ou igual a 9 recebe o valor do calculo, senao, recebe o valor 0 | |
return f'{novo_cnpj}{digito}' | |
def apenas_numeros(cnpj): | |
''' | |
### Pega os números do cnpj e retorna... | |
#### ( remove todos os caracteres que forem diferentes de 0 a 9) | |
''' | |
return re.sub(r'[^0-9]', '', cnpj) # diferente de 0 a 9, subtitui por nada (deixando os números coladinhos) | |
# verifica se não é uma sequencia (111.111.111.111.111) | |
def eh_sequencia(cnpj): | |
sequencia = cnpj[0] * len(cnpj) # cria uma sequencia, ex primeiro num = 0, (000000000000000) | |
if sequencia == cnpj: # se for uma sequencia de números iguais (11111111111111) | |
return True # retorna true e fala que é invalido | |
else: | |
return False # retorna false e fala que é VÁLIDO | |
print(sequencia) | |
############ EXECUTE EM UM MAIN.PY #################### | |
import cnpj | |
import os | |
os.system('cls' if os.name == 'nt' else 'clear') | |
''' | |
O módulo se chama cnpj, se eu chamar algo aqui dentro de cnpj, vai subistituir o módulo | |
''' | |
cnpj1 = "40.688.134/0001-61" | |
if cnpj.valida(cnpj1): # se a funçao retornar True: | |
print(f'{cnpj1} É válido') | |
else: | |
print(f'{cnpj1} É inválido') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment