mirror of https://github.com/abpframework/abp.git
3 changed files with 74 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||
import { AbstractControl, ValidatorFn } from '@angular/forms'; |
|||
|
|||
export interface CreditCardError { |
|||
creditCardNumber: true; |
|||
} |
|||
|
|||
export function validateCreditCard(): ValidatorFn { |
|||
return (control: AbstractControl): CreditCardError | null => { |
|||
if (control.pristine) return null; |
|||
|
|||
return isValidCreditCard(String(control.value)) ? null : { creditCardNumber: true }; |
|||
}; |
|||
} |
|||
|
|||
function isValidCreditCard(value: string): boolean { |
|||
value = value.replace(/[ -]/g, ''); |
|||
|
|||
if (!/^[0-9]{13,19}$/.test(value)) return false; |
|||
|
|||
let checksum = 0; |
|||
let multiplier = 1; |
|||
|
|||
for (let i = value.length; i > 0; i--) { |
|||
const digit = Number(value[i - 1]) * multiplier; |
|||
/* tslint:disable-next-line:no-bitwise */ |
|||
checksum += (digit % 10) + ~~(digit / 10); |
|||
|
|||
multiplier = (multiplier * 2) % 3; |
|||
} |
|||
|
|||
return checksum % 10 === 0; |
|||
} |
|||
@ -1,8 +1,11 @@ |
|||
import { Validators } from '@angular/forms'; |
|||
import { validateCreditCard } from './credit-card.validator'; |
|||
import { validateRequired } from './required.validator'; |
|||
export * from './credit-card.validator'; |
|||
export * from './required.validator'; |
|||
|
|||
export const AbpValidators = { |
|||
creditCard: validateCreditCard, |
|||
email: () => Validators.email, |
|||
required: validateRequired, |
|||
}; |
|||
|
|||
Loading…
Reference in new issue