cnpjcpf.
Código · Go

Gerar CPF em Go

Função sem dependências que gera um CPF matematicamente válido para teste: sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11. Números fictícios, só para dev e QA.

A função

Go
package brdoc

import (
	"math/rand"
	"strconv"
)

func dvCpfGen(b string) int {
	n := len(b)
	s := 0
	for i := 0; i < n; i++ {
		s += int(b[i]-'0') * ((n + 1) - i)
	}
	if r := s % 11; r >= 2 {
		return 11 - r
	}
	return 0
}

func GenerateCPF() string {
	base := ""
	for i := 0; i < 9; i++ {
		base += strconv.Itoa(rand.Intn(10))
	}
	d1 := dvCpfGen(base)
	d2 := dvCpfGen(base + strconv.Itoa(d1))
	return base + strconv.Itoa(d1) + strconv.Itoa(d2)
}

Sorteia 9 dígitos de base e calcula os dois verificadores pelo módulo 11: cada dígito é multiplicado por um peso decrescente, somado, e o resto da divisão por 11 vira o dígito (resto < 2 ? 0 : 11 - resto). O 2º DV entra com a base já acrescida do 1º. A saída é a string de 11 dígitos, sem máscara.

publicidade

Cuidados

  • Número fictício, não real. A função gera um CPF que passa no módulo 11, mas não corresponde a nenhuma pessoa. É para teste de software e QA — ver se é legal gerar CPF/CNPJ.
  • Válido ≠ existe. Consistência matemática não é emissão pela Receita. Não use saída de gerador como dado de pessoa real.
  • Sequências repetidas (11111111111) são tecnicamente consistentes no módulo 11; o gerador quase nunca as produz (base aleatória), mas o validador as rejeita de propósito com allSame.
  • math/rand não é criptográfico. Para massa de teste tudo bem; se precisar de imprevisibilidade real, troque por crypto/rand.
  • Guarde sem máscara (só os 11 dígitos) e formate só na exibição.

Continue

Perguntas frequentes

Preciso de alguma biblioteca para gerar CPF em Go?
Não. A função usa só a biblioteca padrão (math/rand e strconv). Para projetos maiores há libs mantidas como klassmann/cpfcnpj e paemuri/brdoc.
O CPF gerado é real?
Não. Ele passa no módulo 11, mas é fictício — para teste de software e QA, não corresponde a nenhuma pessoa.
O <code>math/rand</code> serve para gerar CPF?
Para massa de teste, sim. Não é criptográfico; se precisar de imprevisibilidade real, use crypto/rand.
Código verificado por transliteração contra o núcleo (10000 amostras, 0 inválido). Algoritmo módulo 11 oficial. Números fictícios para teste. Revisado em 06/2026.