UNPKG

card-validator

Version:

A library for validating credit card fields

57 lines (46 loc) 1.23 kB
import type { Verification } from "./types"; const DEFAULT_LENGTH = 3; function includes(array: number[], thing: number): boolean { for (let i = 0; i < array.length; i++) { if (thing === array[i]) { return true; } } return false; } function max(array: number[]): number { let maximum = DEFAULT_LENGTH; let i = 0; for (; i < array.length; i++) { maximum = array[i] > maximum ? array[i] : maximum; } return maximum; } function verification( isValid: boolean, isPotentiallyValid: boolean, ): Verification { return { isValid, isPotentiallyValid }; } export function cvv( value: string | unknown, maxLength: number | number[] = DEFAULT_LENGTH, ): Verification { maxLength = maxLength instanceof Array ? maxLength : [maxLength]; if (typeof value !== "string") { return verification(false, false); } if (!/^\d*$/.test(value)) { return verification(false, false); } if (includes(maxLength, value.length)) { return verification(true, true); } if (value.length < Math.min.apply(null, maxLength)) { return verification(false, true); } if (value.length > max(maxLength)) { return verification(false, false); } return verification(true, true); }