UNPKG

@lacussoft/cnpj-gen

Version:

Utility to generate CNPJ (Brazilian Business Tax ID)

207 lines (149 loc) ‱ 8.53 kB
![cnpj-gen para JavaScript](https://br-utils.vercel.app/img/cover_cnpj-gen.jpg) > 🚀 **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)