package Business::CreditCard;
require Exporter;
-use vars qw( @ISA $VERSION $Country );
+use vars qw( @ISA $VERSION @EXPORT @EXPORT_OK %EXPORT_TAGS $Country );
@ISA = qw( Exporter );
-$VERSION = "0.34";
+$VERSION = "0.36_01";
+
+@EXPORT = qw( cardtype validate generate_last_digit );
+@EXPORT_OK = qw( receipt_cardtype validate_card );
+$EXPORT_TAGS{NEW} = qw( validate_card cardtype receipt_cardtype );
$Country = 'US';
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
+in the US. You can change this to return the type the card should
be treated as in a different country by setting
C<$Business::CreditCard::Country> to your two-letter country code. This
is probably what you want to determine if you accept the card, or which
Use this for receipt display/printing only.
+Note: this subroutine is not exported by default like the others.
+Before 0.36, you needed to call this subroutine fully-qualified, as
+Business::CreditCard::receipt_cardtype()
+
+In 0.36 and later, you can import it into your namespace:
+
+ use Business::CreditCard qw( :DEFAULT receipt_cardtype );
+
+
=head1 ORIGINAL AUTHOR
Jon Orwant
existing code? "use Business::CreditCard <some_minimum_version>" turns it off?
Explicitly ask to turn it off and list that in the SYNOPSIS?
+=head2 validate() and @EXPORT transition plan
+
+First (done in 0.36):
+
+validate_card() is the new name for validate(). Both work for now.
+
+New-style usage (not recommended for code that needs to support B:CC before 0.36):
+
+ use Business::CreditCard qw( :NEW );
+
+You get validate_card(), cardtype() and receipt_cardtype(). You can also ask
+for them explicitly / individually:
+
+ use Business::CreditCard qw( validate_card cardtype receipt_cardtype );
+
+
+Second (we're at now now):
+
+Waiting for 0.36+ to become more prevalent.
+
+
+Third:
+
+Recommend new-style usage.
+
+
+Fourth:
+ (this is the incompatible part):
+
+Don't export validate() (or anything else [separately?]) by default.
+
+This is the part that will break things and we probably won't do for a long
+time, until new-style usage is the norm and the tradeoff of breaking old code
+is worth it to stop or namespace pollution.
+
=head1 SEE ALSO
L<Business::CreditCard::Object> is a wrapper around Business::CreditCard
=cut
-@EXPORT = qw(cardtype validate generate_last_digit);
-
## ref http://neilb.org/reviews/luhn.html#Comparison it looks like
## Business::CCCheck is 2x faster than we are. looking at their implementation
## not entirely a fair comparison, we also do the equivalent of their CC_clean,
|| $number =~ /^564182[\dx]{10}([\dx]{2,3})?$/o
|| $number =~ /^6(3(33[0-4][0-9])|759[0-9]{2})[\dx]{10}([\dx]{2,3})?$/o;
#redunant with above, catch 49* that's not Switch
- return "VISA card" if $number =~ /^4[\dx]{12-18}$/o;
+ return "VISA card" if $number =~ /^4[\dx]{12,18}$/o;
#return "Diner's Club/Carte Blanche"
# if $number =~ /^3(0[0-59]|[68][\dx])[\dx]{11}$/o;
# }
# $type = '' if $ccn % 10;
# return $type;
-sub validate {
+
+sub validate { validate_card(@_); }
+
+sub validate_card {
# Allow use as a class method
shift if UNIVERSAL::isa( $_[0], 'Business::CreditCard' );