package javacodebook.regex.credit;

import java.util.regex.Pattern;

/**
 * Testen, ob eine Kreditkartennummer ein gültiges Format hat.
 * @author  Mark Donnermeyer
 */
public class CreditCardChecker {
    
    public static void main(String[] args) {
        if (args.length == 0)
            printUsage();
        
        String pattern =
            "(4\\d{3}[- ?]\\d{4}[- ]?\\d{4}-?\\d)"  +           // Visa
            "|" +                                               // oder
            "(5[1-5]\\d{2}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4})" + // Master
            "|" +                                               // oder
            "(3[068]\\d{2}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{2})" + // Diners
            "|" +                                               // oder
            "(3[47]\\d{2}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{3})";   // Express
        
        System.out.print("'" + args[0] + "' ist ");
        if (Pattern.matches(pattern, args[0]))
            System.out.println("gültig");
        else
            System.out.println("nicht gültig");
    }   

    private static void printUsage() {
        System.out.println("Aufruf: java javacodebook.regex.credit.CreditCardChecker <id>");
        System.exit(0);
    }    
}