@gfinnovation/br-validations
v2.0.1
Published
Brazilian CPF and CNPJ validation utilities
Downloads
2,461
Maintainers
Readme
@gfinnovation/br-validations
TypeScript utilities for validating, formatting, cleaning, and transforming Brazilian CPF and CNPJ documents.
The package supports:
- Individual and Unified CPF/CNPJ validation
- Individual and Unified CPF/CNPJ formatting
- Individual and Unified CPF/CNPJ cleaning
- Alphanumeric CNPJ validation
class-validatordecorator for CPF/CNPJ validationclass-transformerdecorator for automatic CPF/CNPJ normalization- TypeScript support
- ESM and CommonJS builds
Installation
npm install @gfinnovation/br-validationsIf you use decorators with class-validator or class-transformer, also install:
npm install class-validator class-transformer reflect-metadataNestJS Integration (v11.0.0)
If you are using this package inside a NestJS (v11.0.0) project, ensure you have the core common utilities installed:
# npm
npm i @nestjs/common@^11.0.0
# yarn
yarn add @nestjs/common@^11.0.0
# pnpm
pnpm add @nestjs/common@^11.0.0And import metadata once in your application entrypoint:
import 'reflect-metadata';Features
| Feature | Supported | |---|---| | Validate CPF | ✅ | | Validate CNPJ | ✅ | | Validate Alphanumeric CNPJ | ✅ | | Unified Validate (CPF/CNPJ) | ✅ | | Format CPF | ✅ | | Format CNPJ | ✅ | | Unified Format (CPF/CNPJ) | ✅ | | Clean CPF | ✅ | | Clean CNPJ | ✅ | | Unified Clean (CPF/CNPJ) | ✅ | | NestJS v11.0.0 compatible | ✅ | | class-validator decorator | ✅ | | class-transformer decorator | ✅ | | TypeScript support | ✅ |
Importing
import {
// CPF Utilities
validateCPF,
formatCPF,
cleanCPF,
// CNPJ Utilities
validateCNPJ,
formatCNPJ,
cleanCNPJ,
// Unified Utilities (CPF or CNPJ)
cpfCnpjValidate,
cpfCnpjFormat,
cpfCnpjClean,
// Decorators
IsCpfCnpjValid,
CpfCnpjTransform,
} from '@gfinnovation/br-validations';Unified Utilities (CPF / CNPJ)
These functions dynamically detect whether the input is a CPF or CNPJ and apply the corresponding logic.
cpfCnpjValidate
Validates either a CPF or a CNPJ (including alphanumeric CNPJ).
import { cpfCnpjValidate } from '@gfinnovation/br-validations';
cpfCnpjValidate('589.831.040-15'); // true (CPF)
cpfCnpjValidate('12.345.678/0001-95'); // true (CNPJ)
cpfCnpjValidate('invalid-value'); // falsecpfCnpjFormat
Formats a raw string into a standard CPF or CNPJ mask based on length.
import { cpfCnpjFormat } from '@gfinnovation/br-validations';
cpfCnpjFormat('12345678900'); // 123.456.789-00
cpfCnpjFormat('12345678000195'); // 12.345.678/0001-95cpfCnpjClean
Removes punctuation and symbols from both CPF and CNPJ formatted strings.
import { cpfCnpjClean } from '@gfinnovation/br-validations';
cpfCnpjClean('123.456.789-00'); // 12345678900
cpfCnpjClean('12.345.678/0001-95'); // 12345678000195CPF Specific Utilities
validateCPF
import { validateCPF } from '@gfinnovation/br-validations';
validateCPF('589.831.040-15'); // true
validateCPF('123.456.789-00'); // falseformatCPF
import { formatCPF } from '@gfinnovation/br-validations';
formatCPF('12345678900'); // 123.456.789-00cleanCPF
import { cleanCPF } from '@gfinnovation/br-validations';
cleanCPF('123.456.789-00'); // 12345678900CNPJ Specific Utilities
validateCNPJ
Supports numeric, alphanumeric, and formatted variants.
import { validateCNPJ } from '@gfinnovation/br-validations';
validateCNPJ('12.345.678/0001-95'); // true
validateCNPJ('11.ANE.A76/0001-75'); // trueformatCNPJ
import { formatCNPJ } from '@gfinnovation/br-validations';
formatCNPJ('12345678000195'); // 12.345.678/0001-95
formatCNPJ('11ANEA76000175'); // 11.ANE.A76/0001-75cleanCNPJ
import { cleanCNPJ } from '@gfinnovation/br-validations';
cleanCNPJ('11.ANE.A76/0001-75'); // 11ANEA76000175class-validator Decorator
IsCpfCnpjValid
Decorator for validating CPF or CNPJ fields inside DTOs.
import { IsCpfCnpjValid } from '@gfinnovation/br-validations';
class CreateUserDto {
@IsCpfCnpjValid()
document: string;
}class-transformer Decorator
CpfCnpjTransform
Automatically pads and transforms CPF or CNPJ values during data instantiation.
import 'reflect-metadata';
import { CpfCnpjTransform } from '@gfinnovation/br-validations';
class PaymentDto {
tpPessoaPagdr: string;
@CpfCnpjTransform()
documento: string;
}NestJS Example
Combines @nestjs/common decorators with @gfinnovation/br-validations for data transfer objects (DTOs) and automatic payload validation/transformation:
import { Controller, Post, Body, UsePipes, ValidationPipe } from '@nestjs/common';
import { IsCpfCnpjValid, CpfCnpjTransform } from '@gfinnovation/br-validations';
export class CreateUserDto {
tpPessoaPagdr: string;
@CpfCnpjTransform()
@IsCpfCnpjValid()
documento: string;
}
@Controller('users')
export class UsersController {
@Post()
@UsePipes(new ValidationPipe({ transform: true }))
create(@Body() createUserDto: CreateUserDto) {
return {
message: 'User validated and formatted successfully',
data: createUserDto,
};
}
}NestJS Pipe Example
This package does not provide a NestJS pipe implementation.
If you need to normalize and validate route parameters, create a custom pipe using the validation functions exported by this package.
import {
ArgumentMetadata,
BadRequestException,
Injectable,
PipeTransform,
} from '@nestjs/common';
import {
validateCPF,
validateCNPJ,
cpfCnpjClean,
} from '@gfinnovation/br-validations';
@Injectable()
export class CpfCnpjPipeTransform implements PipeTransform {
transform(
value: string | number | null | undefined,
metadata: ArgumentMetadata,
): string {
if (value == null) {
throw new BadRequestException('CPF/CNPJ is required');
}
value = cpfCnpjClean(String(value).trim().toUpperCase());
const isNumeric = /^\d+$/.test(value);
const normalized = isNumeric
? value.length <= 11
? value.padStart(11, '0')
: value.padStart(14, '0')
: value;
if (normalized.length === 11 && !validateCPF(normalized)) {
throw new BadRequestException('Invalid CPF');
}
if (normalized.length === 14 && !validateCNPJ(normalized)) {
throw new BadRequestException('Invalid CNPJ');
}
return normalized;
}
}Usage:
@Get(':document')
findByDocument(
@Param('document', CpfCnpjPipeTransform)
document: string,
) {
return document;
}Build
npm run buildTest
npm testTypeScript Configuration
If you use decorators, enable the following in your tsconfig.json:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}Troubleshooting & pnpm Support
Because pnpm handles nested node_modules strictly using hard links, it will not automatically resolve optional peer dependencies required by `decorators unless they are explicitly installed in the root project.
Missing Peer Dependencies Error
If you use @IsCpfCnpjValid or @CpfCnpjTransform and experience runtime errors or type failures using pnpm, verify you have installed the required validation peer dependencies:
pnpm add class-validator class-transformer reflect-metadataDecorator Metadata Issues
If NestJS fails to inject or read your DTO types during request validation, ensure your .npmrc or project configurations do not strictly isolate the metadata context, and that reflect-metadata is imported at the very top of your application entry point (main.ts):
import 'reflect-metadata'; // Must be the first line
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';License
ISC
