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érioFakeForgeFaker.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árioSDK fakeforge-brAlgoritmo local
Só telefone simples✅✅
Pessoa correlacionada✅❌
100% offline❌✅
Zero deps runtime✅✅
Bulk 10k+✅ 1 chamada⚠️ loop
CustoFree 50/diaR$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.

Próximos passos