import { BaseValidator } from "../base";
import { ValidationResult } from "../../interfaces";
export declare enum CardType {
    VISA = "visa",
    MASTERCARD = "mastercard",
    AMEX = "amex",
    DISCOVER = "discover",
    DINERS = "diners",
    JCB = "jcb",
    UNKNOWN = "unknown"
}
export interface CreditCardValidatorOptions {
    numberRequired?: boolean;
    expiryRequired?: boolean;
    cvvRequired?: boolean;
    nameRequired?: boolean;
    allowedCardTypes?: CardType[];
    validateLuhn?: boolean;
}
export interface CreditCardData {
    number?: string;
    expiry?: string;
    cvv?: string;
    name?: string;
}
export interface CreditCardResult extends CreditCardData {
    cardType: CardType;
}
export type CreditCardValidationResult = ValidationResult<CreditCardResult>;
export declare class CreditCardValidator extends BaseValidator<CreditCardResult> {
    private options;
    private cardPatterns;
    private cvvLengths;
    private expiryPattern;
    constructor(options?: CreditCardValidatorOptions);
    validate(card: CreditCardData): CreditCardValidationResult;
    /**
     * Detects the credit card type based on its number pattern
     */
    private detectCardType;
    /**
     * Validates a credit card number using the Luhn algorithm
     * The Luhn algorithm creates a checksum to help validate credit card numbers
     */
    private validateLuhnChecksum;
    /**
     * Validates that the expiry date is not in the past
     */
    private validateExpiryDate;
    /**
     * Masks the credit card number for security purposes
     * Returns format like: **** **** **** 1234
     */
    private maskCardNumber;
}
