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 2026CNPJ 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])
}
}