CreditCard(3p)

NAME
"Business::CreditCard" - Validate/generate credit card checksums/names

SYNOPSIS
    use Business::CreditCard;

    print validate("5276 4400 6542 1319");
    print cardtype("5276 4400 6542 1319");
    print generate_last_digit("5276 4400 6542 131");

Business::CreditCard is available at a CPAN site near you.

DESCRIPTION
These subroutines tell you whether a credit card number is self-consistent -- whether the last digit of the number is a valid checksum for the preceding digits.

The validate() subroutine returns 1 if the card number provided passes the checksum test, and 0 otherwise.

The cardtype() subroutine returns a string containing the type of card. The list of possible return values is more comprehensive than it used to be, but additions are still most welcome.

Possible return values are:

  VISA card
  MasterCard
  Discover card
  American Express card
  Diner's Club/Carte Blanche
  enRoute
  JCB
  BankCard
  Switch
  Solo
  China Union Pay
  Unknown

"Not a credit card" is returned on obviously invalid data values.

As of 0.30, cardtype() will accept a partial card masked with "x", "X', ".", "*" or "_". Only the first 2-6 digits and the lenth are significant; whitespace and dashes are removed. To recognize just Visa, MasterCard and Amex, you only need the first two digits; to recognize almost all cards except some Switch cards, you need the first four digits, and to recognize all cards including the remaining Switch cards, you need the first six digits.

The generate_last_digit() subroutine computes and returns the last digit of the card given the preceding digits. With a 16-digit card, you provide the first 15 digits; the subroutine returns the sixteenth.

This module does not tell you whether the number is on an actual card, only whether it might conceivably be on a real card. To verify whether a card is real, or whether it's been stolen, or to actually process charges, you need a Merchant account. See Business::OnlinePayment.

These subroutines will also work if you provide the arguments as numbers instead of strings, e.g. "validate(5276440065421319)".

CHANGES IN 0.30
Credit card issuers have recently been forming agreements to process cards on other networks, in which one type of card is processed as another card type.

By default, Business::CreditCard returns the type the card should be treated as in the US and Canada. You can change this to return the type the card should be treated as in a different country by setting $Business::OnlinePayment::Country to your two-letter country code. This is probably what you want to determine if you accept the card, or which merchant agreement is is processed through.

You can also set $Business::OnlinePayment::Country to a false value such as the empty string to return the "base" card type. This is probably only useful for informational purposes when used along with the default type.

Here are the currently known agreements:

Diner's club cards (starting with 36) are now identified as "MasterCard" inside the US and Canada.
China Union Pay cards are identified as Discover cards outside China.
•

AUTHOR
Jon Orwant

The Perl Journal and MIT Media Lab

orwant@tpj.com

Current maintainer is Ivan Kohler <ivan-business-creditcard@420.am>. Please don't bother Jon with emails about this module.

Lee Lawrence <LeeL@aspin.co.uk>, Neale Banks <neale@lowendale.com.au> and Max Becker <Max.Becker@firstgate.com> contributed support for additional card types. Lee also contributed a working test.pl.

SEE ALSO
Business::CreditCard::Object is a wrapper around Business::CreditCard providing an OO interface. Assistance integrating this into the base Business::CreditCard distribution is welcome.

Business::OnlinePayment is a framework for processing online payments including modules for various payment gateways.

POD ERRORS
Hey! The above document had some coding errors, which are explained below:

Around line 115:
    '=item' outside of any '=over'

Around line 117:
    You forgot a '=back' before '=head1'