@lacussoft/cnpj-gen
Version:
Utility to generate CNPJ (Brazilian Business Tax ID)
207 lines (149 loc) âą 8.53 kB
Markdown

> đ **Suporte total ao [novo formato alfanumĂ©rico de CNPJ](https://github.com/user-attachments/files/23937961/calculodvcnpjalfanaumerico.pdf).**
> đ [Access documentation in English](https://github.com/LacusSolutions/br-utils-js/blob/main/packages/cnpj-gen/README.md)
UtilitĂĄrio em JavaScript/TypeScript para gerar CNPJs vĂĄlidos (Cadastro Nacional da Pessoa JurĂdica).
## Recursos
- â
**CNPJ alfanumérico**: Gera CNPJ de 14 caracteres com conjuntos opcionais numérico, alfabético ou alfanumérico (padrão)
- â
**Prefixo opcional**: Informe de 1 a 12 caracteres alfanumĂ©ricos para fixar o inĂcio do CNPJ (ex.: base) e gerar o restante com dĂgitos verificadores vĂĄlidos
- â
**Formatação**: Opção de retornar a string no formato padrão (`00.000.000/0000-00`)
- â
**Gerador reutilizåvel**: Classe `CnpjGenerator` com opçÔes padrão e sobrescritas por chamada
- â
**TypeScript**: DefiniçÔes de tipo completas e compatĂvel com strict mode
- â
**DependĂȘncias mĂnimas**: Sem dependĂȘncias externas, apenas pacotes internos como `@lacussoft/utils`, e `@lacussoft/cnpj-dv` para o cĂĄlculo dos dĂgitos verificadores
- â
**Tratamento de erros**: Erros de tipo e exceçÔes especĂficas para opçÔes invĂĄlidas
## Instalação
```bash
# usando NPM
$ npm install --save @lacussoft/cnpj-gen
# usando Bun
$ bun add @lacussoft/cnpj-gen
```
## InĂcio rĂĄpido
```ts
// ES Modules
import cnpjGen from '@lacussoft/cnpj-gen'
// Common JS
const cnpjGen = require('@lacussoft/cnpj-gen')
```
Uso bĂĄsico:
```ts
cnpjGen() // ex.: 'AB123CDE000155' (14 caracteres alfanuméricos)
cnpjGen({ format: true }) // ex.: 'AB.123.CDE/0001-55'
cnpjGen({ prefix: '45623767' }) // ex.: '45623767000296'
cnpjGen({ prefix: '456237670002', format: true }) // ex.: '45.623.767/0002-96'
cnpjGen({ type: 'numeric' }) // ex.: '65453043000178' (apenas dĂgitos)
cnpjGen({ type: 'alphabetic' }) // ex.: 'ABCDEFGHIJKL80' (apenas letras, exceto dĂgitos verificadores)
```
Para frontends legados, inclua o build UMD (ex.: minificado) em uma tag `<script>`; `cnpjGen` fica disponĂvel globalmente:
```html
<script src="https://cdn.jsdelivr.net/npm/@lacussoft/cnpj-gen@latest/dist/cnpj-gen.min.js"></script>
```
## Uso
### OpçÔes do gerador
Todas as opçÔes são opcionais:
| Opção | Tipo | Padrão | Descrição |
|--------|------|---------|-------------|
| `format` | boolean | `false` | Se `true`, retorna o CNPJ gerado no formato padrĂŁo (`00.000.000/0000-00`) |
| `prefix` | string | `''` | String inicial parcial (1â12 caracteres alfanumĂ©ricos). Apenas alfanumĂ©ricos sĂŁo mantidos e convertidos para maiĂșsculas; os caracteres faltantes sĂŁo gerados aleatoriamente e os dĂgitos verificadores sĂŁo calculados. |
| `type` | `'numeric'` \| `'alphabetic'` \| `'alphanumeric'` | `'alphanumeric'` | Conjunto de caracteres da parte gerada aleatoriamente (o `prefix` Ă© mantido apĂłs sanitização). **Os dĂgitos verificadores sĂŁo sempre numĂ©ricos.** |
Regras do prefixo: a base (primeiros 8 caracteres) e a filial (caracteres 9â12) nĂŁo podem ser todos zeros; 12 dĂgitos repetidos (ex.: `777777777777`) tambĂ©m nĂŁo sĂŁo permitidos.
### `cnpjGen` (função auxiliar)
Gera uma string de CNPJ vålida. Sem opçÔes, retorna um CNPJ alfanumérico de 14 caracteres. à um atalho para `new CnpjGenerator(options).generate()`.
- **`options`** (opcional): `CnpjGeneratorOptionsInput` â ver [OpçÔes do gerador](#opçÔes-do-gerador).
### `CnpjGenerator` (classe)
Para opçÔes padrão reutilizåveis ou sobrescritas por chamada, use a classe:
```ts
import { CnpjGenerator } from '@lacussoft/cnpj-gen'
const generator = new CnpjGenerator({ type: 'numeric', format: true })
generator.generate() // ex.: '73.008.535/0005-06'
generator.generate({ prefix: '12345678' }) // sobrescreve apenas nesta chamada
generator.options // opçÔes padrão atuais (CnpjGeneratorOptions)
```
- **`constructor`**: `new CnpjGenerator(defaultOptions?)` â opçÔes padrĂŁo opcionais (objeto simples ou instĂąncia de `CnpjGeneratorOptions`).
- **`generate(options?)`**: Retorna um CNPJ vålido; `options` por chamada sobrescrevem as opçÔes da instùncia apenas naquela chamada.
- **`options`**: Getter que retorna as opçÔes padrão usadas quando não se passam opçÔes na chamada (mesma instùncia usada internamente; alterå-la afeta chamadas futuras de `generate`).
### `CnpjGeneratorOptions` (classe)
Armazena as opçÔes (`format`, `prefix`, `type`) com validação e merge:
```ts
import { CnpjGeneratorOptions } from '@lacussoft/cnpj-gen'
const options = new CnpjGeneratorOptions({
prefix: 'AB123XYZ',
type: 'numeric',
format: true,
})
options.prefix // 'AB123XYZ'
options.type // 'numeric'
options.format // true
options.set({ format: false }) // merge e retorna this
options.all // cópia superficial congelada das opçÔes atuais
```
- **`constructor`**: `new CnpjGeneratorOptions(defaultOptions?, ...overrides)` â opçÔes mescladas na ordem.
- **`format`**, **`prefix`**, **`type`**: Getters/setters; o prefixo Ă© validado (tamanho, base/filial ineligĂveis, dĂgitos repetidos).
- **`set(options)`**: Atualiza vårias opçÔes de uma vez; retorna `this`.
- **`all`**: Snapshot somente leitura das opçÔes atuais.
## API
### ExportaçÔes
- **`cnpjGen`** (default): `(options?: CnpjGeneratorOptionsInput) => string`
- **`CnpjGenerator`**: Classe para gerar CNPJ com opçÔes padrão opcionais e sobrescritas por chamada.
- **`CnpjGeneratorOptions`**: Classe que armazena as opçÔes (`format`, `prefix`, `type`) com validação e merge.
- **`CNPJ_LENGTH`**: `14` (constante).
- **`CNPJ_PREFIX_MAX_LENGTH`**: `12` (constante).
- **Tipos**: `CnpjType`, `CnpjGeneratorOptionsInput`, `CnpjGeneratorOptionsType`.
### Erros e exceçÔes
Este pacote usa **TypeError** para tipos de opção invĂĄlidos e **Exception** para valores invĂĄlidos (`prefix` ou `type`). VocĂȘ pode capturar classes especĂficas ou as bases.
- **CnpjGeneratorTypeError** (_abstract_) â base para erros de tipo em opçÔes
- **CnpjGeneratorOptionsTypeError** â uma opção tem tipo incorreto (ex.: `prefix` nĂŁo Ă© string)
- **CnpjGeneratorException** (_abstract_) â base para exceçÔes de valor de opção
- **CnpjGeneratorOptionPrefixInvalidException** â prefixo invĂĄlido (ex.: base/filial zerados, dĂgitos repetidos, tamanho invĂĄlido)
- **CnpjGeneratorOptionTypeInvalidException** â `type` nĂŁo Ă© um de `'numeric'`, `'alphabetic'`, `'alphanumeric'`
```ts
import cnpjGen, {
CnpjGeneratorOptionsTypeError,
CnpjGeneratorOptionPrefixInvalidException,
CnpjGeneratorOptionTypeInvalidException,
CnpjGeneratorException,
} from '@lacussoft/cnpj-gen'
// Tipo de opção (ex.: `prefix` deve ser string)
try {
cnpjGen({ prefix: 123 })
} catch (e) {
if (e instanceof CnpjGeneratorOptionsTypeError) {
console.log(e.message) // CNPJ generator option "prefix" must be of type string. Got integer number.
}
}
// Prefixo invĂĄlido (ex.: base zerada)
try {
cnpjGen({ prefix: '000000000001' })
} catch (e) {
if (e instanceof CnpjGeneratorOptionPrefixInvalidException) {
console.log(e.reason, e.actualInput)
}
}
// Valor de type invĂĄlido
try {
cnpjGen({ type: 'invalid' })
} catch (e) {
if (e instanceof CnpjGeneratorOptionTypeInvalidException) {
console.log(e.expectedValues, e.actualInput)
}
}
// Qualquer exceção do pacote
try {
cnpjGen({ prefix: '000000000000' })
} catch (e) {
if (e instanceof CnpjGeneratorException) {
// tratar
}
}
```
## Contribuição e suporte
ContribuiçÔes sĂŁo bem-vindas! Consulte as [Diretrizes de contribuição](https://github.com/LacusSolutions/br-utils-js/blob/main/CONTRIBUTING.md). Se o projeto for Ăștil para vocĂȘ, considere:
- â Dar uma estrela no repositĂłrio
- đ€ Contribuir com cĂłdigo
- đĄ [Sugerir novas funcionalidades](https://github.com/LacusSolutions/br-utils-js/issues)
- đ [Reportar bugs](https://github.com/LacusSolutions/br-utils-js/issues)
## Licença
Este projeto estĂĄ sob a licença MIT â veja o arquivo [LICENSE](https://github.com/LacusSolutions/br-utils-js/blob/main/LICENSE).
## Changelog
Veja o [CHANGELOG](https://github.com/LacusSolutions/br-utils-js/blob/main/packages/cnpj-gen/CHANGELOG.md) para alteraçÔes e histórico de versÔes.
---
Feito com â€ïž por [Lacus Solutions](https://github.com/LacusSolutions)