Regexp::Common::CC - provide patterns for credit card numbers.


Regexp-Common documentation Contained in the Regexp-Common distribution.

Index


Code Index:

NAME

Top

Regexp::Common::CC -- provide patterns for credit card numbers.

SYNOPSIS

Top

    use Regexp::Common qw /CC/;

    while (<>) {
        /^$RE{CC}{Mastercard}$/   and  print "Mastercard card number\n";
    }

DESCRIPTION

Top

Please consult the manual of Regexp::Common for a general description of the works of this interface.

Do not use this module directly, but load it via Regexp::Common.

This module offers patterns for credit card numbers of several major credit card types. Currently, the supported cards are: Mastercard, Amex, Diners Club, and Discover.

SEE ALSO

Top

Regexp::Common for a general description of how to use this interface.

http://www.beachnet.com/~hstiles/cardtype.html

Credit Card Validation - Check Digits

http://euro.ecom.cmu.edu/resources/elibrary/everycc.htm

Everything you ever wanted to know about CC's

http://www.webopedia.com/TERM/L/Luhn_formula.html

Luhn formula

AUTHORS

Top

Damian Conway (damian@conway.org) and Abigail (regexp-common@abigail.be).

MAINTAINANCE

Top

This package is maintained by Abigail (regexp-common@abigail.be).

BUGS AND IRRITATIONS

Top

Bound to be plenty. Send them in to regexp-common@abigail.be.

LICENSE and COPYRIGHT

Top


Regexp-Common documentation Contained in the Regexp-Common distribution.

package Regexp::Common::CC;

use Regexp::Common qw /pattern clean no_defaults/;
use Regexp::Common::_support qw /luhn/;

use strict;
use warnings;

use vars qw /$VERSION/;
$VERSION = '2010010201';

my @cards = (
    # Name           Prefix                    Length           mod 10
    [Mastercard   =>   '5[1-5]',                16,                1],
    [Visa         =>   '4',                     [13, 16],          1],
    [Amex         =>   '3[47]',                 15,                1],
   # Carte Blanche
   ['Diners Club' =>   '3(?:0[0-5]|[68])',      14,                1],
    [Discover     =>   '6011',                  16,                1],
    [enRoute      =>   '2(?:014|149)',          15,                0],
    [JCB          => [['3',                     16,                1],
                      ['2131|1800',             15,                1]]],
);


foreach my $card (@cards) {
    my ($name, $prefix, $length, $mod) = @$card;

    # Skip the harder ones for now.
    next if ref $prefix || ref $length;
    next unless $mod;

    my $times = $length + $mod;
    pattern name    => [CC => $name],
            version => 5.006,
            create  => sub {
                use re 'eval';
                qr <((?=($prefix))[0-9]{$length})
                                        (?(?{Regexp::Common::_support::luhn $1})|(?!))>x
            }
    ;
}




1;

__END__