@lacussoft/cpf-gen
Version:
Utility to generate CPF (Brazilian Individual's Taxpayer ID)
187 lines (132 loc) âą 7.08 kB
Markdown

> đ [Access documentation in English](https://github.com/LacusSolutions/br-utils-js/blob/main/packages/cpf-gen/README.md)
UtilitĂĄrio em JavaScript/TypeScript para gerar CPFs vĂĄlidos (Cadastro de Pessoas FĂsicas).
## Recursos
- â
**Prefixo opcional**: Informe de 0 a 9 dĂgitos para fixar o inĂcio do CPF e gerar o restante com dĂgitos verificadores vĂĄlidos
- â
**Formatação**: Opção de retornar a string no formato padrão (`000.000.000-00`)
- â
**Gerador reutilizåvel**: Classe `CpfGenerator` 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/cpf-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
# com NPM
$ npm install --save @lacussoft/cpf-gen
# com Bun
$ bun add @lacussoft/cpf-gen
```
## InĂcio rĂĄpido
```ts
// ES Modules
import cpfGen from '@lacussoft/cpf-gen'
// Common JS
const cpfGen = require('@lacussoft/cpf-gen')
```
Uso bĂĄsico:
```ts
cpfGen() // ex.: '47844241055' (11 dĂgitos numĂ©ricos)
cpfGen({ format: true }) // ex.: '005.265.352-88'
cpfGen({ prefix: '528250911' }) // ex.: '52825091138'
cpfGen({ prefix: '528250911', format: true }) // ex.: '528.250.911-38'
```
Para frontends legados, inclua o build UMD (ex.: minificado) em uma tag `<script>`; `cpfGen` fica disponĂvel globalmente:
```html
<script src="https://cdn.jsdelivr.net/npm/@lacussoft/cpf-gen@latest/dist/cpf-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 CPF gerado no formato padrĂŁo (`000.000.000-00`) |
| `prefix` | string | `''` | String inicial parcial (0â9 dĂgitos). Apenas dĂgitos sĂŁo mantidos; os caracteres faltantes sĂŁo gerados aleatoriamente e os dĂgitos verificadores sĂŁo calculados. |
Regras do prefixo: a base (primeiros 9 dĂgitos) nĂŁo pode ser toda zerada; 9 dĂgitos repetidos (ex.: `999999999`) nĂŁo sĂŁo permitidos.
### `cpfGen` (função auxiliar)
Gera uma string de CPF vĂĄlida. Sem opçÔes, retorna um CPF numĂ©rico de 11 dĂgitos. Ă um atalho para `new CpfGenerator(options).generate()`.
- **`options`** (opcional): `CpfGeneratorOptionsInput` â ver [OpçÔes do gerador](#opçÔes-do-gerador).
### `CpfGenerator` (classe)
Para opçÔes padrão reutilizåveis ou sobrescritas por chamada, use a classe:
```ts
import { CpfGenerator } from '@lacussoft/cpf-gen'
const generator = new CpfGenerator({ format: true })
generator.generate() // ex.: '005.265.352-88'
generator.generate({ prefix: '123456' }) // sobrescreve apenas nesta chamada
generator.options // opçÔes padrão atuais (CpfGeneratorOptions)
```
- **`constructor`**: `new CpfGenerator(defaultOptions?)` â opçÔes padrĂŁo opcionais (objeto simples ou instĂąncia de `CpfGeneratorOptions`).
- **`generate(options?)`**: Retorna um CPF 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`).
### `CpfGeneratorOptions` (classe)
Armazena as opçÔes (`format`, `prefix`) com validação e merge:
```ts
import { CpfGeneratorOptions } from '@lacussoft/cpf-gen'
const options = new CpfGeneratorOptions({
prefix: '123456',
format: true,
})
options.prefix // '123456'
options.format // true
options.set({ format: false }) // merge e retorna this
options.all // cópia superficial congelada das opçÔes atuais
```
- **`constructor`**: `new CpfGeneratorOptions(defaultOptions?, ...overrides)` â opçÔes mescladas na ordem.
- **`format`**, **`prefix`**: Getters/setters; o prefixo Ă© validado (tamanho, base ineligĂvel, 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
- **`cpfGen`** (padrĂŁo): `(options?: CpfGeneratorOptionsInput) => string`
- **`CpfGenerator`**: Classe para gerar CPF com opçÔes padrão opcionais e sobrescritas por chamada.
- **`CpfGeneratorOptions`**: Classe que armazena as opçÔes (`format`, `prefix`) com validação e merge.
- **`CPF_LENGTH`**: `11` (constante).
- **`CPF_PREFIX_MAX_LENGTH`**: `9` (constante).
- **Tipos**: `CpfGeneratorOptionsInput`, `CpfGeneratorOptionsType`.
### Erros e exceçÔes
Este pacote usa **TypeError** para tipos de opção invĂĄlidos e **Exception** para valores invĂĄlidos (ex.: `prefix`). VocĂȘ pode capturar classes especĂficas ou as bases.
- **CpfGeneratorTypeError** (_abstract_) â base para erros de tipo em opçÔes
- **CpfGeneratorOptionsTypeError** â uma opção tem tipo incorreto (ex.: `prefix` nĂŁo Ă© string)
- **CpfGeneratorException** (_abstract_) â base para exceçÔes de valor de opção
- **CpfGeneratorOptionPrefixInvalidException** â prefixo invĂĄlido (ex.: base zerada, dĂgitos repetidos, tamanho invĂĄlido)
```ts
import cpfGen, {
CpfGeneratorOptionsTypeError,
CpfGeneratorOptionPrefixInvalidException,
CpfGeneratorException,
} from '@lacussoft/cpf-gen'
// Tipo de opção (ex.: `prefix` deve ser string)
try {
cpfGen({ prefix: 123 })
} catch (e) {
if (e instanceof CpfGeneratorOptionsTypeError) {
console.log(e.message) // CPF generator option "prefix" must be of type string. Got integer number.
}
}
// Prefixo invĂĄlido (ex.: base zerada)
try {
cpfGen({ prefix: '00000000' })
} catch (e) {
if (e instanceof CpfGeneratorOptionPrefixInvalidException) {
console.log(e.reason, e.actualInput)
}
}
// Qualquer exceção do pacote
try {
cpfGen({ prefix: '999999999' })
} catch (e) {
if (e instanceof CpfGeneratorException) {
// 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/cpf-gen/CHANGELOG.md) para alteraçÔes e histórico de versÔes.
---
Feito com â€ïž por [Lacus Solutions](https://github.com/LacusSolutions)