github brianvoe/gofakeit v7.9.0
ID Generator

20 hours ago

New: ID() — Fast, Human-Readable Random Identifier

(GoFakeIt v7.9.0)

gofakeit.ID() is a new high-performance identifier generator designed for speed, readability, and practically zero collision probability.

Unlike UUID v4 or XID, this generator is intentionally random-first, not structure-based.
Perfect for mock APIs, test data, fixtures, seed data, and temporary identifiers.


Highlights

  • Human readable alphabet, no confusing characters
    23456789abcdefghjkmnpqrstuvwxyz (no 1, l, i or 0, o to alleviate confusion)
  • Fast
  • Memory Allocation
  • Generates from your rand source
  • Shorter than UUID, faster than XID, and requires no coordination

Example

id := gofakeit.ID()
fmt.Println(id)
// → "3t9qf4c92npxhw7bg6y0"

Performance Benchmarks

Measured on Go 1.25

Generator / Function Benchmark Name ops/sec ns/op B/op allocs/op
gofakeit.ID() BenchmarkID-10 31,383,146 37.8 ns 24 1
gofakeit.UUIDv4() BenchmarkUUIDv4-10 22,131,577 53.8 ns 48 1
github.com/rs/xid BenchmarkXID-10 16,190,817 74.2 ns 0 0
github.com/google/uuid (v4) BenchmarkGoogleUUIDv4-10 3,098,770 386.1 ns 64 2

Takeaway: gofakeit.ID() is ~2× faster than XID and ~10× faster than UUID v4, while being shorter and human-readable.


Collision Probability (Randomness Math)

  • ID length: 20 characters
  • Alphabet: 32 slots with one duplicated character (intentional) → avoids retries, maximizes speed
  • Effective entropy: ≈ 98.25 bits

Even under very large bursts, duplication is astronomically unlikely

Collision probability when generating n IDs within 1 second (birthday bound)

n (IDs in 1s) gofakeit.ID() collision probability
100,000 0.00000000000000000001326
1,000,000 0.000000000000000001326017
10,000,000 0.000000000000000132601736
100,000,000 0.000000000000013260173678
1,000,000,000 0.000000000001326017367838

For comparison (same n):

  • UUID v4 (122 bits): much lower probabilities (but significantly slower and longer)
  • XID: structural uniqueness (time + machine + pid + counter). Treat collisions as operationally zero when configured normally.

Need structural, sortable IDs? Use XID or Snowflake.
Want random, readable, fast? Use gofakeit.ID().


RNG Behavior

Mode Behavior
Default (gofakeit.ID()) PCG for speed, seeded via crypto/rand → fast + unpredictable
Full crypto (NewFaker(source.NewCrypto())) crypto/rand for every ID → maximum randomness (slower)
Deterministic (New(seed)) PCG with fixed seed → reproducible ID sequences (useful for tests/fixtures)

We seed PCG with a cryptographic seed when seed == 0. This prevents accidental identical streams across processes/containers.


Example Usage

package main

import (
	"fmt"

	"github.com/brianvoe/gofakeit/v7"
	"github.com/brianvoe/gofakeit/v7/source"
)

func main() {
	// Fast ID — PCG, automatically crypto-seeded
	fmt.Println("fast ID:", gofakeit.ID())

	// Cryptographically secure per-ID RNG
	crypto := source.NewCrypto()
	faker := gofakeit.NewFaker(crypto, true)
	fmt.Println("crypto ID:", faker.ID())
}

Don't miss a new gofakeit release

NewReleases is sending notifications on new releases.