cnpjcpf.
Código · Python

Gerar CNPJ em Python

Função que monta a base (raiz + matriz 0001), calcula os dois verificadores pelo módulo 11 e devolve um CNPJ válido — numérico ou alfanumérico, com ou sem máscara.

A função

Monta a base (8 dígitos de raiz + a matriz 0001), calcula os dois verificadores pelo módulo 11 e devolve um CNPJ válido. Com alpha=True, a raiz vira alfanumérica.

Python
import random

_W1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
_W2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
_ALFABETO = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

def _dv_cnpj(base: str, pesos) -> int:
    soma = sum((ord(c) - 48) * p for c, p in zip(base, pesos))
    resto = soma % 11
    return 0 if resto < 2 else 11 - resto

def generate_cnpj(alpha: bool = False, mask: bool = False) -> str:
    if alpha:
        raiz = ''.join(random.choice(_ALFABETO) for _ in range(8))
    else:
        raiz = ''.join(str(random.randint(0, 9)) for _ in range(8))
    base = raiz + '0001'                       # matriz
    d1 = _dv_cnpj(base, _W1)
    d2 = _dv_cnpj(base + str(d1), _W2)
    s = base + str(d1) + str(d2)
    if mask:
        return f'{s[0:2]}.{s[2:5]}.{s[5:8]}/{s[8:12]}-{s[12:14]}'
    return s

generate_cnpj()                          # '11222333000181'
generate_cnpj(alpha=True, mask=True)     # '12.ABC.345/0001-DE' → DV numérico

Os dois verificadores são sempre numéricos; só a raiz pode ter letras. A conversão ord(c) - 48 faz o mesmo módulo 11 valer para os dois formatos.

Forçar pelo menos uma letra

Como a raiz é sorteada, um generate_cnpj(alpha=True) pode sair só com dígitos (ainda válido). Se você quer garantir o formato novo na demonstração, troque uma posição por uma letra antes de calcular os DV:

Python
raiz = list(''.join(random.choice(_ALFABETO) for _ in range(8)))
i = random.randrange(8)
raiz[i] = random.choice('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
raiz = ''.join(raiz)
publicidade

Cuidados

  • Válido ≠ real. O CNPJ gerado passa no módulo 11, mas não existe na Receita. É para teste e QA.
  • Matriz é 0001. A função fixa a ordem da matriz; filiais seriam 0002 em diante — veja matriz e filial.
  • Alfanumérico: só maiúsculas e DV sempre numérico. Detalhes em CNPJ alfanumérico.
  • No banco, use texto (CHAR(14)/VARCHAR): coluna numérica quebra com letras.

Continue

Gerador verificado por execução: milhares de CNPJs (numéricos e alfanuméricos) gerados e validados pela função oficial, todos válidos. Algoritmo módulo 11 com ASCII−48. Revisado em 06/2026.