angular-cc-library
Version:
angular credit card library
53 lines • 8.59 kB
JavaScript
import { Validators } from '@angular/forms';
import { CreditCard } from './credit-card';
export class CreditCardValidators {
static validateCCNumber(control) {
if (Validators.required(control) !== undefined && Validators.required(control) !== null) {
return { ccNumber: true };
}
const num = control.value.toString().replace(/\s+|-/g, '');
if (!/^\d+$/.test(num)) {
return { ccNumber: true };
}
const card = CreditCard.cardFromNumber(num);
if (!card) {
return { ccNumber: true };
}
if (card.length.includes(num.length) && (card.luhn === false || CreditCard.luhnCheck(num))) {
return null;
}
const upperlength = card.length[card.length.length - 1];
if (num.length > upperlength) {
const registeredNum = num.substring(0, upperlength);
if (CreditCard.luhnCheck(registeredNum)) {
return null;
}
}
return { ccNumber: true };
}
static validateExpDate(control) {
if (Validators.required(control) !== undefined && Validators.required(control) !== null) {
return { expDate: true };
}
if (typeof control.value !== 'undefined' && control.value.length >= 5) {
let [month, year] = control.value.split(/[\s/]+/, 2);
if ((year != null ? year.length : void 0) === 2 && /^\d+$/.test(year)) {
const prefix = new Date().getFullYear().toString().slice(0, 2);
year = prefix + year;
}
month = parseInt(month, 10).toString();
year = parseInt(year, 10).toString();
if (/^\d+$/.test(month) && /^\d+$/.test(year) && (month >= 1 && month <= 12)) {
const expiry = new Date(year, month);
const currentTime = new Date();
expiry.setMonth(expiry.getMonth() - 1);
expiry.setMonth(expiry.getMonth() + 1, 1);
if (expiry > currentTime) {
return null;
}
}
}
return { expDate: true };
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2MtbGlicmFyeS9zcmMvbGliL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE1BQU0sT0FBTyxvQkFBb0I7SUFDeEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQXdCO1FBQ3JELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4RixPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2QixPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQzFCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksVUFBVSxDQUFDLFNBQVMs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cywgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENyZWRpdENhcmQgfSBmcm9tICcuL2NyZWRpdC1jYXJkJztcblxuZXhwb3J0IGNsYXNzIENyZWRpdENhcmRWYWxpZGF0b3JzIHtcbiAgcHVibGljIHN0YXRpYyB2YWxpZGF0ZUNDTnVtYmVyKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSAhPT0gdW5kZWZpbmVkICYmIFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCkgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7Y2NOdW1iZXI6IHRydWV9O1xuICAgIH1cblxuICAgIGNvbnN0IG51bSA9IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrfC0vZywgJycpO1xuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KG51bSkpIHtcbiAgICAgIHJldHVybiB7Y2NOdW1iZXI6IHRydWV9O1xuICAgIH1cblxuICAgIGNvbnN0IGNhcmQgPSBDcmVkaXRDYXJkLmNhcmRGcm9tTnVtYmVyKG51bSk7XG5cbiAgICBpZiAoIWNhcmQpIHtcbiAgICAgIHJldHVybiB7Y2NOdW1iZXI6IHRydWV9O1xuICAgIH1cblxuICAgIGlmIChjYXJkLmxlbmd0aC5pbmNsdWRlcyhudW0ubGVuZ3RoKSAmJiAoY2FyZC5sdWhuID09PSBmYWxzZSB8fCBDcmVkaXRDYXJkLmx1aG5DaGVjayhudW0pKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdXBwZXJsZW5ndGggPSBjYXJkLmxlbmd0aFtjYXJkLmxlbmd0aC5sZW5ndGggLSAxXTtcbiAgICBpZiAobnVtLmxlbmd0aCA+IHVwcGVybGVuZ3RoKSB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkTnVtID0gbnVtLnN1YnN0cmluZygwLCB1cHBlcmxlbmd0aCk7XG4gICAgICBpZiAoQ3JlZGl0Q2FyZC5sdWhuQ2hlY2socmVnaXN0ZXJlZE51bSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtjY051bWJlcjogdHJ1ZX07XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRXhwRGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCkgIT09IHVuZGVmaW5lZCAmJiBWYWxpZGF0b3JzLnJlcXVpcmVkKGNvbnRyb2wpICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge2V4cERhdGU6IHRydWV9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPj0gNSkge1xuICAgICAgbGV0IFttb250aCwgeWVhcl0gPSBjb250cm9sLnZhbHVlLnNwbGl0KC9bXFxzL10rLywgMik7XG5cbiAgICAgIGlmICgoeWVhciAhPSBudWxsID8geWVhci5sZW5ndGggOiB2b2lkIDApID09PSAyICYmIC9eXFxkKyQvLnRlc3QoeWVhcikpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkuc2xpY2UoMCwgMik7XG4gICAgICAgIHllYXIgPSBwcmVmaXggKyB5ZWFyO1xuICAgICAgfVxuXG4gICAgICBtb250aCA9IHBhcnNlSW50KG1vbnRoLCAxMCkudG9TdHJpbmcoKTtcbiAgICAgIHllYXIgPSBwYXJzZUludCh5ZWFyLCAxMCkudG9TdHJpbmcoKTtcblxuICAgICAgaWYgKC9eXFxkKyQvLnRlc3QobW9udGgpICYmIC9eXFxkKyQvLnRlc3QoeWVhcikgJiYgKG1vbnRoID49IDEgJiYgbW9udGggPD0gMTIpKSB7XG4gICAgICAgIGNvbnN0IGV4cGlyeSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFRpbWUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBleHBpcnkuc2V0TW9udGgoZXhwaXJ5LmdldE1vbnRoKCkgLSAxKTtcbiAgICAgICAgZXhwaXJ5LnNldE1vbnRoKGV4cGlyeS5nZXRNb250aCgpICsgMSwgMSk7XG5cbiAgICAgICAgaWYgKGV4cGlyeSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge2V4cERhdGU6IHRydWV9O1xuICB9XG59XG5cbiJdfQ==