iranian-nestjs-validator
Version:
28 lines (26 loc) • 1.02 kB
text/typescript
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 'کد ملی نامعتبر است';
},
},
});
};
}