UNPKG

iranian-nestjs-validator

Version:

28 lines (26 loc) 1.02 kB
import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator'; export function IsIranianNationalCode(validationOptions?: ValidationOptions) { return function (object: Object, propertyName: string) { registerDecorator({ name: 'isIranianNationalCode', target: object.constructor, propertyName: propertyName, options: validationOptions, validator: { validate(value: any) { if (typeof value !== 'string' || !/^\d{10}$/.test(value)) return false; const check = +value[9]; const sum = value .split('') .slice(0, 9) .reduce((total, num, index) => total + +num * (10 - index), 0); const remainder = sum % 11; return (remainder < 2 && check === remainder) || (remainder >= 2 && check === 11 - remainder); }, defaultMessage(): string { return 'کد ملی نامعتبر است'; }, }, }); }; }