cnpjcpf.
Código · Go

Gerar CNPJ em Go

Função sem dependências que gera um CNPJ matematicamente válido para teste — numérico ou alfanumérico pelo parâmetro alpha bool. Calcula os dois verificadores pelo módulo 11 (ASCII−48), reusando o dv do validador.

A função

Go
package brdoc

import (
	"math/rand"
	"strconv"
)

const set = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

func GenerateCNPJ(alpha bool) string {
	base := ""
	for i := 0; i < 8; i++ {
		if alpha {
			base += string(set[rand.Intn(36)])
		} else {
			base += strconv.Itoa(rand.Intn(10))
		}
	}
	base += "0001"
	w1 := []int{5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
	w2 := []int{6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2}
	d1 := dv(base, w1)
	d2 := dv(base+strconv.Itoa(d1), w2)
	return base + strconv.Itoa(d1) + strconv.Itoa(d2)
}

Monta 8 posições de base (dígitos, ou letras+dígitos quando alpha é true), fixa a ordem da matriz em 0001 e calcula os dois verificadores pelo módulo 11. O alpha só troca o alfabeto da base; o cálculo do DV é o mesmo, com a conversão ASCII − 48 ('0'→0 … 'Z'→42). Os 2 verificadores são sempre numéricos.

GenerateCNPJ reusa o dv do validador — a mesma função que confere o CNPJ, com a conversão ASCII − 48 que vale para dígitos e letras A–Z. Cole os dois no mesmo pacote brdoc.
publicidade

Cuidados

  • Número fictício, não real. A função gera um CNPJ que passa no módulo 11, mas não corresponde a empresa nenhuma. É para teste de software e QA — ver se é legal gerar CPF/CNPJ e CNPJ válido vs. CNPJ real.
  • Reusa o dv do validador. A função depende da dv(base, w) da página de validar CNPJ em Go; sem ela no pacote, o código não compila.
  • Válido ≠ existe. Consistência matemática não é registro na Receita.
  • math/rand não é criptográfico. Suficiente para massa de teste; para imprevisibilidade real use crypto/rand.
  • Alfanumérico entra em jul/2026 (IN RFB nº 2.229/2024), só para novos registros. O parâmetro alpha já antecipa o formato.

Continue

Perguntas frequentes

Como gero um CNPJ alfanumérico em Go?
Passe true para o parâmetro alpha: GenerateCNPJ(true). A base passa a sortear sobre 36 símbolos (A–Z e 0–9); os dois verificadores continuam numéricos.
A geração depende do validador?
Sim. GenerateCNPJ reusa a função dv do validador (com a conversão ASCII − 48), que vale tanto para dígitos quanto para letras A–Z. Cole os dois no mesmo pacote.
O CNPJ gerado existe na Receita?
Não. Ele passa no módulo 11, mas é fictício. Veja CNPJ válido vs. CNPJ real.
Código verificado por transliteração contra o núcleo (10000 amostras, 0 inválido). Algoritmo módulo 11 com ASCII−48. Números fictícios para teste. Revisado em 06/2026.