cpf-cnpj-validator
Version:
Valida, formata e gera strings de CPF ou CNPJ, com suporte ao novo formato alfanumérico da RFB e adapters para joi, yup e zod.
235 lines (229 loc) • 7.97 kB
TypeScript
/**
* Calcula o dígito verificador de um CPF usando o algoritmo Módulo 11
* com pesos lineares crescentes.
*
* @param digits - String com 9 dígitos (para DV1) ou 10 dígitos (para DV2).
* @returns Dígito verificador (0..9).
*/
declare function cpfDigit(digits: string): number;
/**
* Calcula o dígito verificador de um CNPJ usando o algoritmo Módulo 11
* com pesos cíclicos 2..9.
*
* Aceita tanto CNPJs puramente numéricos quanto no formato alfanumérico
* da Nota Técnica RFB 49/2024 (letras A-Z convertidas via ASCII - 48).
*
* @param digits - String com 12 dígitos (para DV1) ou 13 dígitos (para DV2).
* @returns Dígito verificador (0..9).
*/
declare function cnpjDigit(digits: string): number;
/** Opções para `cnpj.generate()`. */
interface GenerateOptions$1 {
/** Retorna o CNPJ com máscara `XX.XXX.XXX/XXXX-YY` quando `true`. */
formatted?: boolean;
}
/**
* Remove caracteres de máscara e normaliza um CNPJ.
*
* Em modo padrão (loose), converte minúsculas para maiúsculas e remove
* qualquer caractere que não seja dígito ou letra A-Z. Em modo strict,
* remove apenas `.`, `/` e `-` (máscara oficial) sem normalizar o case.
*
* @param value - Entrada a ser normalizada.
* @param strict - Se `true`, só remove os caracteres da máscara oficial.
* @returns Apenas dígitos e letras A-Z remanescentes.
*/
declare function strip$1(value: string, strict?: boolean): string;
/**
* Aplica a máscara oficial `XX.XXX.XXX/XXXX-YY` no CNPJ (numérico ou
* alfanumérico). Os 2 últimos caracteres (DVs) são sempre numéricos.
*
* @param value - CNPJ cru ou já formatado.
* @returns CNPJ mascarado, ou entrada normalizada quando não casar com o
* padrão de 14 posições.
*/
declare function format$1(value: string): string;
/**
* Valida um CNPJ verificando tamanho, lista negra, shape dos DVs e os
* dois dígitos verificadores via Módulo 11.
*
* Aceita tanto CNPJs puramente numéricos (formato legado) quanto
* alfanuméricos (novo formato da Nota Técnica RFB 49/2024 — vigência
* obrigatória em julho/2026).
*
* @param value - CNPJ (cru, formatado ou com lixo, conforme `strict`).
* @param strict - Se `true`, só aceita máscara canônica ou 14 caracteres
* `[0-9A-Z]` sem normalização de case.
* @returns `true` se o CNPJ é válido; `false` caso contrário.
*
* @example
* ```ts
* cnpj.isValid('54.550.752/0001-55') // true
* cnpj.isValid('54550752000155') // true
* cnpj.isValid('12ABC34501DE35') // true (novo formato RFB)
* cnpj.isValid('12.ABC.345/01DE-35') // true
* ```
*/
declare function isValid$1(value: string, strict?: boolean): boolean;
/**
* Gera um CNPJ alfanumérico matematicamente válido, seguindo o formato
* da Nota Técnica RFB 49/2024.
*
* @param options - Boolean legado (apenas `formatted`) ou objeto de opções.
* @returns CNPJ gerado com 14 caracteres (12 alfanuméricos + 2 DVs
* numéricos) ou a máscara oficial.
*
* @example
* ```ts
* cnpj.generate() // '58A0Z919U001O6'
* cnpj.generate(true) // '58.A0Z.919/U001-O6' (nope — DVs sempre numéricos)
* cnpj.generate({ formatted: true }) // '58.A0Z.919/U001-06'
* ```
*/
declare function generate$1(options?: boolean | GenerateOptions$1): string;
declare const _default$1: {
verifierDigit: typeof cnpjDigit;
strip: typeof strip$1;
format: typeof format$1;
isValid: typeof isValid$1;
generate: typeof generate$1;
};
/**
* Mapa dos 27 UFs brasileiros para seus dígitos de Região Fiscal da
* Receita Federal (0..9), codificados na 9ª posição do CPF.
*
* @example
* ```ts
* FISCAL_REGION_BY_UF.SP // 8 (São Paulo — 8ª Região Fiscal)
* FISCAL_REGION_BY_UF.RS // 0 (Rio Grande do Sul — 10ª Região Fiscal)
* ```
*/
declare const FISCAL_REGION_BY_UF: {
readonly DF: 1;
readonly GO: 1;
readonly MS: 1;
readonly MT: 1;
readonly TO: 1;
readonly AC: 2;
readonly AM: 2;
readonly AP: 2;
readonly PA: 2;
readonly RO: 2;
readonly RR: 2;
readonly CE: 3;
readonly MA: 3;
readonly PI: 3;
readonly AL: 4;
readonly PB: 4;
readonly PE: 4;
readonly RN: 4;
readonly BA: 5;
readonly SE: 5;
readonly MG: 6;
readonly ES: 7;
readonly RJ: 7;
readonly SP: 8;
readonly PR: 9;
readonly SC: 9;
readonly RS: 0;
};
/** Unidade da Federação — um dos 26 estados brasileiros ou DF. */
type UF = keyof typeof FISCAL_REGION_BY_UF;
/** Opções para `cpf.generate()`. */
interface GenerateOptions {
/** Retorna o CPF com máscara `XXX.XXX.XXX-XX` quando `true`. */
formatted?: boolean;
/** UF de emissão — controla o dígito da Região Fiscal (9ª posição). */
state?: UF;
}
/**
* Remove caracteres de máscara e normaliza um CPF.
*
* @param value - Entrada a ser normalizada.
* @param strict - Se `true`, remove apenas `.` e `-`. Se `false` ou omitido,
* remove qualquer caractere não numérico.
* @returns Apenas os dígitos remanescentes.
*/
declare function strip(value: string, strict?: boolean): string;
/**
* Aplica a máscara oficial `XXX.XXX.XXX-XX` no CPF.
*
* @param value - CPF cru ou já formatado.
* @returns O CPF com máscara, ou a entrada normalizada quando não casar
* com o padrão de 11 dígitos.
*/
declare function format(value: string): string;
/**
* Valida um CPF verificando tamanho, lista negra e os dois dígitos
* verificadores via Módulo 11.
*
* @param value - CPF (cru, formatado ou com lixo, conforme `strict`).
* @param strict - Se `true`, só aceita máscara canônica `XXX.XXX.XXX-XX`
* ou 11 dígitos puros. Se `false` ou omitido, remove qualquer lixo.
* @returns `true` se o CPF é válido; `false` caso contrário.
*
* @example
* ```ts
* cpf.isValid('295.379.955-93') // true
* cpf.isValid('29537995593') // true
* cpf.isValid('00000000000') // false (blacklist)
* ```
*/
declare function isValid(value: string, strict?: boolean): boolean;
/**
* Gera um CPF matematicamente válido, opcionalmente formatado ou
* vinculado a uma UF específica (via Região Fiscal da RFB).
*
* @param options - Boolean legado (apenas `formatted`) ou objeto com
* `formatted` e/ou `state`. Quando `state` é informado, a 9ª posição
* recebe o dígito da Região Fiscal correspondente.
* @returns CPF gerado, com 11 dígitos crus ou a máscara oficial.
* @throws {TypeError} Se `options.state` for informado mas não for um UF
* conhecido.
*
* @example
* ```ts
* cpf.generate() // '32564428777'
* cpf.generate(true) // '325.644.287-77'
* cpf.generate({ state: 'SP' }) // '...8??' (8ª posição = RF SP)
* cpf.generate({ formatted: true, state: 'SP' }) // '325.644.287-77' (9ª = '8')
* ```
*/
declare function generate(options?: boolean | GenerateOptions): string;
declare const _default: {
verifierDigit: typeof cpfDigit;
strip: typeof strip;
format: typeof format;
isValid: typeof isValid;
generate: typeof generate;
FISCAL_REGION_BY_UF: {
readonly DF: 1;
readonly GO: 1;
readonly MS: 1;
readonly MT: 1;
readonly TO: 1;
readonly AC: 2;
readonly AM: 2;
readonly AP: 2;
readonly PA: 2;
readonly RO: 2;
readonly RR: 2;
readonly CE: 3;
readonly MA: 3;
readonly PI: 3;
readonly AL: 4;
readonly PB: 4;
readonly PE: 4;
readonly RN: 4;
readonly BA: 5;
readonly SE: 5;
readonly MG: 6;
readonly ES: 7;
readonly RJ: 7;
readonly SP: 8;
readonly PR: 9;
readonly SC: 9;
readonly RS: 0;
};
};
export { type GenerateOptions$1 as CnpjGenerateOptions, type GenerateOptions as CpfGenerateOptions, type UF, _default$1 as cnpj, _default$1 as cnpjValidator, _default as cpf, _default as cpfValidator };