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 comallSame. math/randnão é criptográfico. Para massa de teste tudo bem; se precisar de imprevisibilidade real, troque porcrypto/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.