Integração com Class Validator
Valide CPF e CNPJ alfanumérico com class-validator em TypeScript.
Use isCPF e isCNPJ da validation-br para criar decorators customizados do class-validator, usado em NestJS, TypeORM e diversos outros frameworks baseados em decorators. Veja como implementar essa validação em classes de DTO de uma API TypeScript e Node.js: a mesma estrutura de decorator serve tanto para CPF quanto para CNPJ — incluindo o formato alfanumérico —, com a mesma sintaxe usada nos demais campos.
Como validar CPF e CNPJ alfanumérico com class-validator
import {
registerDecorator,
ValidationOptions,
ValidatorConstraint,
ValidatorConstraintInterface,
} from 'class-validator';
import { isCPF } from 'validation-br';
@ValidatorConstraint({ async: false })
export class IsCpfConstraint implements ValidatorConstraintInterface {
validate(cpf: any) {
return isCPF(cpf);
}
defaultMessage() {
return 'CPF inválido';
}
}
export function IsCpf(validationOptions?: ValidationOptions) {
return function (object: any, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName,
options: validationOptions,
constraints: [],
validator: IsCpfConstraint,
});
};
}O mesmo decorator pode ser criado para CNPJ. isCnpj já valida CNPJ alfanumérico (novo formato, a partir de 2026) além do formato numérico, então nenhuma lógica extra é necessária:
import {
registerDecorator,
ValidationOptions,
ValidatorConstraint,
ValidatorConstraintInterface,
} from 'class-validator';
import { isCNPJ } from 'validation-br';
@ValidatorConstraint({ async: false })
export class IsCnpjConstraint implements ValidatorConstraintInterface {
validate(cnpj: any) {
return isCNPJ(cnpj);
}
defaultMessage() {
return 'CNPJ inválido';
}
}
export function IsCnpj(validationOptions?: ValidationOptions) {
return function (object: any, propertyName: string) {
registerDecorator({
target: object.constructor,
propertyName,
options: validationOptions,
constraints: [],
validator: IsCnpjConstraint,
});
};
}Bibliotecas de validação de terceiros só precisam de um predicado booleano — por isso o exemplo usa
isCPFem vez denew CPF(). A API de classes é útil quando você quer o valor normalizado ou uma exceção detalhada, mas para plugar em outra lib de validaçãoisXjá é a integração completa, e funciona igual na 1.x e na 2.0.

