card-validator
Version:
A library for validating credit card fields
57 lines (46 loc) • 1.23 kB
text/typescript
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);
}