Node.js · TypeScript · SDK
Gerador de Telefone em Node.js
Pra gerar telefone brasileiro válido em Node.js, instale npm install fakeforge-br e chame new FakeForge().phone(n). O número segue o formato ANATEL (DDD válido + 9 + 8 dígitos no celular). Faker.js não garante isso por padrão, já que gera dígitos aleatórios sem checar DDD nem a regra do 9.
TL;DR
npm install fakeforge-br
import { FakeForge } from "fakeforge-br"
const celulares = await new FakeForge().phone(100)Rota 1: SDK oficial fakeforge-br
import { FakeForge } from "fakeforge-br"
const ff = new FakeForge()
// 100 celulares formatados
const celulares = await ff.phone(100)
celulares.forEach(c => console.log(c))
// Sem formatação
const celularesRaw = await ff.phone(100, { formatted: false })
// Telefone fixo (10 dígitos, sem o 9)
const fixos = await ff.landline(50)
// Preset customer (telefone + nome + email correlacionados)
const pessoas = await ff.preset("customer", 10)
pessoas.forEach(p => console.log(p.telefone, p.nome))TypeScript types nativos, correlação com outros campos, bulk até 10k por chamada. Requer internet.
Rota 2: algoritmo local (offline)
// telefone.ts - algoritmo local, offline
const DDDS_VALIDOS = [
11, 12, 13, 14, 15, 16, 17, 18, 19,
21, 22, 24, 27, 28,
31, 32, 33, 34, 35, 37, 38,
41, 42, 43, 44, 45, 46, 47, 48, 49,
51, 53, 54, 55,
61, 62, 63, 64, 65, 66, 67, 68, 69,
71, 73, 74, 75, 77, 79,
81, 82, 83, 84, 85, 86, 87, 88, 89,
91, 92, 93, 94, 95, 96, 97, 98, 99,
]
function randomDigits(n: number): string {
return Array.from({ length: n }, () => Math.floor(Math.random() * 10)).join("")
}
export function gerarCelular(formatado = true): string {
const ddd = DDDS_VALIDOS[Math.floor(Math.random() * DDDS_VALIDOS.length)]
const resto = randomDigits(8)
if (formatado) return `(${ddd}) 9${resto.slice(0, 4)}-${resto.slice(4)}`
return `${ddd}9${resto}`
}
export function gerarFixo(formatado = true): string {
const ddd = DDDS_VALIDOS[Math.floor(Math.random() * DDDS_VALIDOS.length)]
const primeiro = 2 + Math.floor(Math.random() * 4)
const resto = randomDigits(7)
const numero = `${primeiro}${resto}`
if (formatado) return `(${ddd}) ${numero.slice(0, 4)}-${numero.slice(4)}`
return `${ddd}${numero}`
}
export function validarTelefone(numero: string): boolean {
const d = numero.replace(/[^0-9]/g, "")
if (d.length !== 10 && d.length !== 11) return false
const ddd = parseInt(d.slice(0, 2), 10)
if (!DDDS_VALIDOS.includes(ddd)) return false
if (d.length === 11) return d[2] === "9"
return ["2", "3", "4", "5"].includes(d[2])
}FakeForge vs Faker.js pra telefone brasileiro
O módulo faker.phone.number() do @faker-js/faker aceita um formato customizado (ex: ## pra dígitos), mas não valida DDD nem obriga o 9 do celular. Pra ficar correto na regra ANATEL, você precisa montar a lógica de DDD e prefixo na mão:
import { faker } from "@faker-js/faker"
import { FakeForge } from "fakeforge-br"
// Faker.js: sem DDD válido, sem regra do 9 garantida
const telefoneFaker = faker.phone.number({ style: "national" })
console.log(telefoneFaker) // formato genérico, DDD pode não existir
// FakeForge: DDD dos 67 válidos + regra ANATEL do 9 garantida
const [telefoneFF] = await new FakeForge().phone(1)
console.log(telefoneFF) // "(41) 98765-4321"| Critério | FakeForge | Faker.js |
|---|---|---|
| DDD dentre os 67 válidos | ✅ | ❌ precisa montar na mão |
| Regra do 9 no celular | ✅ | ❌ precisa montar na mão |
| Correlação com nome/endereço | ✅ via preset | ❌ |
| Funciona 100% offline | ❌ | ✅ |
Uso em Jest
// tests/telefone.test.ts
import { FakeForge } from "fakeforge-br"
import { validarMascaraTelefone } from "../src/validators"
const ff = new FakeForge()
describe("validador de telefone", () => {
let celulares: string[]
beforeAll(async () => {
celulares = await ff.phone(50)
})
test.each([0, 1, 2, 3, 4])("aceita celular válido #%i", (i) => {
expect(validarMascaraTelefone(celulares[i])).toBe(true)
})
test("rejeita telefone com DDD inexistente", () => {
expect(validarMascaraTelefone("(20) 98765-4321")).toBe(false)
})
})Comparação: qual escolher
| Cenário | SDK fakeforge-br | Algoritmo local |
|---|---|---|
| Só telefone simples | ✅ | ✅ |
| Pessoa correlacionada | ✅ | ❌ |
| 100% offline | ❌ | ✅ |
| Zero deps runtime | ✅ | ✅ |
| Bulk 10k+ | ✅ 1 chamada | ⚠️ loop |
| Custo | Free 50/dia | R$0 |
Perguntas frequentes
Faker.js gera telefone brasileiro válido?+
Não por padrão. O faker.phone.number() do @faker-js/faker gera dígitos aleatórios num formato customizável, mas não valida se o DDD existe nem obriga o 9 do celular. Pra formato ANATEL correto, use o SDK fakeforge-br ou monte a lista de 67 DDDs na mão.
Como gerar telefone válido em Node.js sem SDK externo?+
Use o algoritmo local: escolha um DDD da lista dos 67 válidos e monte o número com random.floor(Math.random() * 10) pros dígitos, sempre prefixando 9 no celular.
O SDK fakeforge-br tem tipagem TypeScript?+
Sim. Todos os métodos (phone, landline, preset) retornam tipos nativos, sem necessidade de @types adicional.
Dá pra usar o SDK em testes com Jest?+
Sim. Gere um lote de celulares válidos com ff.phone(n) numa fixture do beforeAll e itere com test.each pra validar seu parser ou máscara de input.