Pular para o conteúdo principal

Documentos e geradores avulsos

Cada peça da pessoa tem o seu subpath, com o gerador e, nos documentos, o validador. Use quando precisar de um valor solto, de um validador sem dependência ou de uma pessoa montada à mão (sexo, idade ou cidade fixos, que a raiz não oferece).

O gerador rng​

Os geradores recebem um rng como primeiro parâmetro. Passe rngDeSemente(semente), da raiz, e a sequência se repete. Sem o rng, o valor muda a cada chamada.

import { rngDeSemente } from '@pilutech/botai-core'
import { gerarCPF, validarCPF } from '@pilutech/botai-core/cpf'
import { gerarCNPJ, validarCNPJ } from '@pilutech/botai-core/cnpj'

const rng = rngDeSemente('documentos')
const cpf = gerarCPF(rng, 'PI')
const cnpj = gerarCNPJ(rng)
console.log(cpf, validarCPF(cpf))
console.log(cnpj, validarCNPJ(cnpj))
839.192.433-58 true
97.447.653/0001-55 true

Um rng avança a cada valor: a ordem das chamadas faz parte do resultado. Cada gerador de documento (CPF, CNPJ, RG, PIS e título) deu 20 000 valores válidos em 20 000 no próprio validador.

Documentos​

SubpathExportaFormato gerado
/cpfgerarCPF(rng?, uf?), validarCPF(v)NNN.NNN.NNN-NN; com uf, o 9º dígito é a região fiscal dela
/cnpjgerarCNPJ(rng?), validarCNPJ(v)NN.NNN.NNN/0001-NN (sempre a filial 0001)
/rggerarRG(rng?, { permitirX? }), validarRG(v), dvRGSP, formatarRGNN.NNN.NNN-D, modelo SSP-SP
/pisgerarPIS(rng?), validarPIS(v), dvPISNNN.NNNNN.NN-N
/titulo-eleitorgerarTituloEleitor(rng?, uf | 'ZZ'), validarTituloEleitor(v, regra?), dvsTituloNNNN NNNN NNNN; os dígitos 9 e 10 são o código da UF
import { rngDeSemente } from '@pilutech/botai-core'
import { gerarRG, validarRG } from '@pilutech/botai-core/rg'
import { gerarPIS, validarPIS } from '@pilutech/botai-core/pis'
import {
gerarTituloEleitor,
validarTituloEleitor,
} from '@pilutech/botai-core/titulo-eleitor'

const rng = rngDeSemente('documentos')
const rg = gerarRG(rng)
const comX = gerarRG(rng, { permitirX: true })
const pis = gerarPIS(rng)
const titulo = gerarTituloEleitor(rng, 'PI')
const exterior = gerarTituloEleitor(rng, 'ZZ')
console.log(rg, validarRG(rg), comX)
console.log(pis, validarPIS(pis))
console.log(
titulo,
validarTituloEleitor(titulo),
validarTituloEleitor(titulo, 'sem-excecao'),
)
console.log(exterior)
83.919.243-5 true 09.744.765-1
135.15196.06-3 true
0479 0958 1570 true true
6310 1628 2879
  • Validadores: aceitam o valor com ou sem máscara (validarCPF('63413240307') também dá true) e devolvem true ou false.
  • CNPJ: só numérico. O CNPJ alfanumérico (vigente desde julho de 2026) não é gerado, e validarCNPJ o recusa.
  • RG: não há padrão nacional; o Botaí usa o modelo SSP-SP em qualquer UF. Por padrão o dígito verificador nunca é X; { permitirX: true } libera.
  • Título de eleitor: uf é uma das 27 siglas ou 'ZZ' (exterior, código 28); sem ela, SP. O número gerado vale nas duas leituras da regra de SP e MG: validarTituloEleitor(v) usa 'com-excecao-sp-mg', e 'sem-excecao' é a outra. Nas 27 UFs, 13 500 títulos em 13 500 saíram válidos nas duas regras e com o código certo.
dica

Passe sempre uma das 27 siglas, em maiúsculas (a lista é UFS, do subpath /uf). Quem confere a UF é a raiz: gerarPessoa recusa sigla inválida com ErroDeOpcao.

Contato, endereço e cartão​

SubpathExportaObservação
/celulargerarCelular(rng?, ddd = '11')sempre celular (sem fixo); confere só o formato do DDD, sem lista de DDDs que existem
/enderecogerarEndereco(rng?, uf?), LOGRADOUROSum dos 34 CEPs reais, com o número dentro da faixa e do lado da rua
/cartaogerarCartao(rng, hojeISO, titular), luhnValido, CARTOES_TESTEsó os dois cartões de teste da Stripe; validade de 12 a 59 meses depois de hoje; CVV de 100 a 999
import { rngDeSemente } from '@pilutech/botai-core'
import { gerarCelular } from '@pilutech/botai-core/celular'
import { gerarEndereco, LOGRADOUROS } from '@pilutech/botai-core/endereco'
import {
CARTOES_TESTE,
gerarCartao,
luhnValido,
} from '@pilutech/botai-core/cartao'

const rng = rngDeSemente('documentos')
const endereco = gerarEndereco(rng, 'PI')
const celular = gerarCelular(rng, endereco.ddd)
const cartao = gerarCartao(rng, '2026-10-05', 'FULANO DE TAL')
console.log(endereco)
console.log(celular.formatado, LOGRADOUROS.length)
console.log(cartao, luhnValido(cartao.numero), CARTOES_TESTE.length)
{
cep: '64000-020',
logradouro: 'Avenida Frei Serafim',
bairro: 'Centro',
cidade: 'Teresina',
uf: 'PI',
ddd: '86',
numero: '103',
complemento: 'Apto 144'
}
(86) 99243-0974 34
{
bandeira: 'visa',
numero: '4242424242424242',
numeroFormatado: '4242 4242 4242 4242',
titular: 'FULANO DE TAL',
validade: '03/28',
mes: '03',
ano: '28',
cvv: '606'
} true 2

O DDD do celular de uma pessoa é o do CEP: para manter a coerência numa pessoa montada à mão, passe endereco.ddd ao gerarCelular, como acima. Os cartões são o Visa 4242424242424242 e o Mastercard 5555555555554444; não há Elo, Amex nem Hipercard.

Nome, nascimento, senha e empresa​

SubpathExportaObservação
/nomegerarNome(rng?)20 prenomes femininos, 20 masculinos, 30 sobrenomes
/nascimentogerarNascimento(rng?, hojeISO, { idadeMin?, idadeMax? })idade de 18 a 65 sem a faixa
/senhagerarSenha(rng?, tamanho?)12 caracteres sem o tamanho; aceita de 12 a 16; começa por letra
/empresagerarEmpresa(rng?, sobrenomes?)razão social e nome fantasia dos sobrenomes; CNPJ com filial 0001
import { rngDeSemente } from '@pilutech/botai-core'
import { gerarNascimento } from '@pilutech/botai-core/nascimento'
import { gerarSenha } from '@pilutech/botai-core/senha'
import { gerarNome } from '@pilutech/botai-core/nome'
import { gerarEmpresa } from '@pilutech/botai-core/empresa'

const rng = rngDeSemente('documentos')
const nome = gerarNome(rng)
console.log(nome)
console.log(gerarNascimento(rng, '2026-10-05', { idadeMin: 30, idadeMax: 40 }))
console.log(gerarSenha(rng, 16))
console.log(gerarEmpresa(rng, nome.sobrenomes))
{
sexo: 'F',
prenome: 'Isabela',
sobrenomes: [ 'Conceição', 'Carvalho' ],
completo: 'Isabela Conceição Carvalho',
noCartao: 'ISABELA C CARVALHO'
}
{ iso: '1993-06-13', br: '13/06/1993', idade: 33 }
Heu@58&$eCv4WrpZ
{
razaoSocial: 'Conceição & Carvalho Consultoria Ltda',
nomeFantasia: 'Carvalho Tech',
cnpj: '16.285.582/0001-30'
}

Tabelas de apoio​

SubpathExportaO que é
/ufUFS, REGIAO_FISCAL_CPF, CODIGO_UF_TITULOas 27 siglas, o 9º dígito do CPF por UF (Receita) e o código da UF no título (TSE)
/prngsfc32o gerador por trás de rngDeSemente
/aleatorioutilitários de sorteiousados pelos geradores
import {
CODIGO_UF_TITULO,
REGIAO_FISCAL_CPF,
UFS,
} from '@pilutech/botai-core/uf'

console.log(
UFS.length,
REGIAO_FISCAL_CPF.PI,
CODIGO_UF_TITULO.PI,
CODIGO_UF_TITULO.ZZ,
)
27 3 15 28

As fontes de cada tabela estão em Os dados por trás.

Pela CLI​

Os mesmos geradores e validadores existem na CLI:

botai cpf --formatado --uf PI
botai validar cnpj 35.728.569/0001-52

Veja Geradores avulsos e Validar documentos.