UNPKG

im-angular-validators

Version:

This library will help you with lots of already written mostly used validators for Angular 2+ applications.

47 lines 9.29 kB
import { IMCreditCardTypeValidatorEnum } from '../enums/credit-card-type.enum'; import { CreditCardValidatorResolver } from '../helpers/credit-card-validator-helpers/credit-card-length-validator.helper'; export class IMCreditCardValidatorConfigModel { constructor() { this.creditCardType = IMCreditCardTypeValidatorEnum.MasterCard; } } export const IMCreditCardValidator = (config = new IMCreditCardValidatorConfigModel()) => { return (control) => { const creditCardNumber = control.value?.replace(/\s/g, ''); if (creditCardNumber?.length) { const creditCardNumberLength = creditCardNumber.length; const requiredCreditCardLength = CreditCardValidatorResolver.NumberLength[config.creditCardType]; const isNumberInINNRange = () => CreditCardValidatorResolver.IINRange[config.creditCardType].some((IINRange) => { for (let i = IINRange.from; i <= IINRange.to; i++) { if (new RegExp('^' + i, 'i').test(creditCardNumber)) { return true; } } return new RegExp('^' + IINRange, 'i').test(creditCardNumber); }); const isNumberFitToLength = () => creditCardNumberLength < requiredCreditCardLength || creditCardNumberLength > requiredCreditCardLength || (creditCardNumberLength < requiredCreditCardLength.from || creditCardNumberLength > requiredCreditCardLength.to); const isLuhnCheckPassed = () => { const arr = (creditCardNumber + '').split('').reverse().map(x => Number(x)); const lastDigit = arr.splice(0, 1)[0]; let sum = arr.reduce((acc, val, i) => (i % 2 !== 0 ? acc + val : acc + ((val * 2) % 9) || 9), 0); sum += lastDigit; return sum % 10 === 0; }; if (!isNumberInINNRange()) { return { creditCardTypeValidationError: true }; } else { if (isNumberFitToLength()) { return { creditCardNumberLengthValidatorError: true }; } else if (!isLuhnCheckPassed()) { return { creditCardDoesNotExist: true }; } } } }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlZGl0LWNhcmQudmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci12YWxpZGF0b3JzL3NyYy9saWIvdmFsaWRhdG9ycy9jcmVkaXQtY2FyZC52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0UsT0FBTyxFQUVMLDJCQUEyQixFQUM1QixNQUFNLDhFQUE4RSxDQUFDO0FBR3RGLE1BQU0sT0FBTyxnQ0FBZ0M7SUFBN0M7UUFDRSxtQkFBYyxHQUFrQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUM7SUFDM0YsQ0FBQztDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxTQUEyQyxJQUFJLGdDQUFnQyxFQUFFLEVBQWUsRUFBRTtJQUN0SSxPQUFPLENBQUMsT0FBd0IsRUFBb0IsRUFBRTtRQUNwRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUzRCxJQUFJLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtZQUM1QixNQUFNLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUN2RCxNQUFNLHdCQUF3QixHQUM1QiwyQkFBMkIsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBRWxFLE1BQU0sa0JBQWtCLEdBQUcsR0FBWSxFQUFFLENBQUMsMkJBQTJCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3hHLENBQUMsUUFBa0QsRUFBRSxFQUFFO2dCQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFJLFFBQTRDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSyxRQUE0QyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDM0gsSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO3dCQUNuRCxPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFDRjtnQkFDRCxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUNGLENBQUM7WUFFRixNQUFNLG1CQUFtQixHQUFHLEdBQVksRUFBRSxDQUFDLHNCQUFzQixHQUFHLHdCQUF3QjttQkFDdkYsc0JBQXNCLEdBQUcsd0JBQXdCO21CQUNqRCxDQUFDLHNCQUFzQixHQUFJLHdCQUE0RCxDQUFDLElBQUk7dUJBQzVGLHNCQUFzQixHQUFJLHdCQUE0RCxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWhHLE1BQU0saUJBQWlCLEdBQUcsR0FBWSxFQUFFO2dCQUN0QyxNQUFNLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pHLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQ2pCLE9BQU8sR0FBRyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3pCLE9BQU8sRUFBQyw2QkFBNkIsRUFBRSxJQUFJLEVBQStCLENBQUM7YUFDNUU7aUJBQU07Z0JBQ0wsSUFBSSxtQkFBbUIsRUFBRSxFQUFFO29CQUN6QixPQUFPLEVBQUMsb0NBQW9DLEVBQUUsSUFBSSxFQUErQixDQUFDO2lCQUNuRjtxQkFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtvQkFDL0IsT0FBTyxFQUFDLHNCQUFzQixFQUFFLElBQUksRUFBK0IsQ0FBQztpQkFDckU7YUFDRjtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SU1DcmVkaXRDYXJkVHlwZVZhbGlkYXRvckVudW19IGZyb20gJy4uL2VudW1zL2NyZWRpdC1jYXJkLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7XHJcbiAgQ3JlZGl0Q2FyZExlbmd0aEZyb21Ub0ludGVyZmFjZSxcclxuICBDcmVkaXRDYXJkVmFsaWRhdG9yUmVzb2x2ZXJcclxufSBmcm9tICcuLi9oZWxwZXJzL2NyZWRpdC1jYXJkLXZhbGlkYXRvci1oZWxwZXJzL2NyZWRpdC1jYXJkLWxlbmd0aC12YWxpZGF0b3IuaGVscGVyJztcclxuaW1wb3J0IHtJTUNyZWRpdENhcmRFcnJvckludGVyZmFjZX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jcmVkaXQtY2FyZC1lcnJvci5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElNQ3JlZGl0Q2FyZFZhbGlkYXRvckNvbmZpZ01vZGVsIHtcclxuICBjcmVkaXRDYXJkVHlwZTogSU1DcmVkaXRDYXJkVHlwZVZhbGlkYXRvckVudW0gPSBJTUNyZWRpdENhcmRUeXBlVmFsaWRhdG9yRW51bS5NYXN0ZXJDYXJkO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgSU1DcmVkaXRDYXJkVmFsaWRhdG9yID0gKGNvbmZpZzogSU1DcmVkaXRDYXJkVmFsaWRhdG9yQ29uZmlnTW9kZWwgPSBuZXcgSU1DcmVkaXRDYXJkVmFsaWRhdG9yQ29uZmlnTW9kZWwoKSk6IFZhbGlkYXRvckZuID0+IHtcclxuICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgPT4ge1xyXG4gICAgY29uc3QgY3JlZGl0Q2FyZE51bWJlciA9IGNvbnRyb2wudmFsdWU/LnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcblxyXG4gICAgaWYgKGNyZWRpdENhcmROdW1iZXI/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBjcmVkaXRDYXJkTnVtYmVyTGVuZ3RoID0gY3JlZGl0Q2FyZE51bWJlci5sZW5ndGg7XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkQ3JlZGl0Q2FyZExlbmd0aDogbnVtYmVyIHwgQ3JlZGl0Q2FyZExlbmd0aEZyb21Ub0ludGVyZmFjZSA9XHJcbiAgICAgICAgQ3JlZGl0Q2FyZFZhbGlkYXRvclJlc29sdmVyLk51bWJlckxlbmd0aFtjb25maWcuY3JlZGl0Q2FyZFR5cGVdO1xyXG5cclxuICAgICAgY29uc3QgaXNOdW1iZXJJbklOTlJhbmdlID0gKCk6IGJvb2xlYW4gPT4gQ3JlZGl0Q2FyZFZhbGlkYXRvclJlc29sdmVyLklJTlJhbmdlW2NvbmZpZy5jcmVkaXRDYXJkVHlwZV0uc29tZShcclxuICAgICAgICAoSUlOUmFuZ2U6IG51bWJlciB8IENyZWRpdENhcmRMZW5ndGhGcm9tVG9JbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAoSUlOUmFuZ2UgYXMgQ3JlZGl0Q2FyZExlbmd0aEZyb21Ub0ludGVyZmFjZSkuZnJvbTsgaSA8PSAoSUlOUmFuZ2UgYXMgQ3JlZGl0Q2FyZExlbmd0aEZyb21Ub0ludGVyZmFjZSkudG87IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobmV3IFJlZ0V4cCgnXicgKyBpLCAnaScpLnRlc3QoY3JlZGl0Q2FyZE51bWJlcikpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgSUlOUmFuZ2UsICdpJykudGVzdChjcmVkaXRDYXJkTnVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBpc051bWJlckZpdFRvTGVuZ3RoID0gKCk6IGJvb2xlYW4gPT4gY3JlZGl0Q2FyZE51bWJlckxlbmd0aCA8IHJlcXVpcmVkQ3JlZGl0Q2FyZExlbmd0aFxyXG4gICAgICAgIHx8IGNyZWRpdENhcmROdW1iZXJMZW5ndGggPiByZXF1aXJlZENyZWRpdENhcmRMZW5ndGhcclxuICAgICAgICB8fCAoY3JlZGl0Q2FyZE51bWJlckxlbmd0aCA8IChyZXF1aXJlZENyZWRpdENhcmRMZW5ndGggYXMgQ3JlZGl0Q2FyZExlbmd0aEZyb21Ub0ludGVyZmFjZSkuZnJvbVxyXG4gICAgICAgIHx8IGNyZWRpdENhcmROdW1iZXJMZW5ndGggPiAocmVxdWlyZWRDcmVkaXRDYXJkTGVuZ3RoIGFzIENyZWRpdENhcmRMZW5ndGhGcm9tVG9JbnRlcmZhY2UpLnRvKTtcclxuXHJcbiAgICAgIGNvbnN0IGlzTHVobkNoZWNrUGFzc2VkID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGFyciA9IChjcmVkaXRDYXJkTnVtYmVyICsgJycpLnNwbGl0KCcnKS5yZXZlcnNlKCkubWFwKHggPT4gTnVtYmVyKHgpKTtcclxuICAgICAgICBjb25zdCBsYXN0RGlnaXQgPSBhcnIuc3BsaWNlKDAsIDEpWzBdO1xyXG4gICAgICAgIGxldCBzdW0gPSBhcnIucmVkdWNlKChhY2MsIHZhbCwgaSkgPT4gKGkgJSAyICE9PSAwID8gYWNjICsgdmFsIDogYWNjICsgKCh2YWwgKiAyKSAlIDkpIHx8IDkpLCAwKTtcclxuICAgICAgICBzdW0gKz0gbGFzdERpZ2l0O1xyXG4gICAgICAgIHJldHVybiBzdW0gJSAxMCA9PT0gMDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICghaXNOdW1iZXJJbklOTlJhbmdlKCkpIHtcclxuICAgICAgICByZXR1cm4ge2NyZWRpdENhcmRUeXBlVmFsaWRhdGlvbkVycm9yOiB0cnVlfSBhcyBJTUNyZWRpdENhcmRFcnJvckludGVyZmFjZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaXNOdW1iZXJGaXRUb0xlbmd0aCgpKSB7XHJcbiAgICAgICAgICByZXR1cm4ge2NyZWRpdENhcmROdW1iZXJMZW5ndGhWYWxpZGF0b3JFcnJvcjogdHJ1ZX0gYXMgSU1DcmVkaXRDYXJkRXJyb3JJbnRlcmZhY2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICghaXNMdWhuQ2hlY2tQYXNzZWQoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHtjcmVkaXRDYXJkRG9lc05vdEV4aXN0OiB0cnVlfSBhcyBJTUNyZWRpdENhcmRFcnJvckludGVyZmFjZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG59O1xyXG4iXX0=