Node.js · TypeScript · SDK

Gerador de CNPJ em Node.js

SDK oficial fakeforge-br cobre CNPJ numérico e alfanumérico 2026 (IN RFB 2.229). Snippets pra Jest, Vitest, NestJS, Express. TypeScript types nativos. Grátis 50/dia.

TL;DR

npm install fakeforge-br

import { FakeForge } from "fakeforge-br"
const ff = new FakeForge()

const cnpjs = await ff.cnpj(100)             // numérico mod-11
const cnpjsAlfa = await ff.cnpjAlfa(50)      // alfanumérico 2026

CNPJ alfanumérico 2026

A IN RFB 2.229 obriga sistemas a aceitar CNPJ com letras a partir de julho/2026. Testa desde já:

import { FakeForge } from "fakeforge-br"
import { validarCnpj } from "./validators"

const ff = new FakeForge()
const cnpjsAlfa = await ff.cnpjAlfa(20)

for (const cnpj of cnpjsAlfa) {
  const ok = validarCnpj(cnpj)
  if (!ok) console.error(`Seu validador quebra em: ${cnpj}`)
}

Algoritmo mod-11 local (TypeScript)

// utils/cnpj.ts - só numérico
export function gerarCnpj(formatado = true): string {
  const n: number[] = [
    ...Array.from({ length: 8 }, () => Math.floor(Math.random() * 10)),
    0, 0, 0, 1  // /0001 (matriz)
  ]

  const p1 = [5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
  const p2 = [6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]

  const s1 = n.reduce((acc, x, i) => acc + x * p1[i], 0)
  let d1 = s1 % 11
  d1 = d1 < 2 ? 0 : 11 - d1
  n.push(d1)

  const s2 = n.reduce((acc, x, i) => acc + x * p2[i], 0)
  let d2 = s2 % 11
  d2 = d2 < 2 ? 0 : 11 - d2
  n.push(d2)

  if (formatado) {
    return `${n[0]}${n[1]}.${n[2]}${n[3]}${n[4]}.${n[5]}${n[6]}${n[7]}/${n[8]}${n[9]}${n[10]}${n[11]}-${n[12]}${n[13]}`
  }
  return n.join("")
}

Uso em Jest

// tests/empresa.test.ts
import { FakeForge } from "fakeforge-br"
import { EmpresaService } from "../src/empresa.service"

const ff = new FakeForge()

describe("EmpresaService.criar", () => {
  test("aceita CNPJ numérico válido", async () => {
    const [cnpj] = await ff.cnpj(1)
    const res = await EmpresaService.criar({ cnpj, razaoSocial: "Test" })
    expect(res.id).toBeDefined()
  })

  test("aceita CNPJ alfanumérico 2026", async () => {
    const [cnpj] = await ff.cnpjAlfa(1)
    const res = await EmpresaService.criar({ cnpj, razaoSocial: "Test Alfa" })
    expect(res.id).toBeDefined()
  })
})

Uso em NestJS (seed command)

// empresa.seed.command.ts
import { Command, CommandRunner } from "nest-commander"
import { FakeForge } from "fakeforge-br"
import { EmpresaService } from "./empresa.service"

@Command({ name: "seed:empresas" })
export class EmpresaSeedCommand extends CommandRunner {
  constructor(private empresas: EmpresaService) { super() }

  async run() {
    const ff = new FakeForge()
    const [cnpjs, cnpjsAlfa] = await Promise.all([
      ff.cnpj(500),
      ff.cnpjAlfa(100),
    ])
    await this.empresas.bulkCreate([...cnpjs, ...cnpjsAlfa])
  }
}

Próximos passos