Skip to content

Instantly share code, notes, and snippets.

@gabriellopesdesouza2002
Created February 18, 2022 16:19
Show Gist options
  • Save gabriellopesdesouza2002/bdd4ab0e81c065bc0eefa90c90370b07 to your computer and use it in GitHub Desktop.
Save gabriellopesdesouza2002/bdd4ab0e81c065bc0eefa90c90370b07 to your computer and use it in GitHub Desktop.
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