summaryrefslogtreecommitdiff
path: root/FS/FS/cust_payby.pm
diff options
context:
space:
mode:
authorJonathan Prykop <jonathan@freeside.biz>2016-05-02 21:44:40 -0500
committerJonathan Prykop <jonathan@freeside.biz>2016-05-04 00:18:23 -0500
commit21b9f3f3ff7870d7cd422b98125a9a917fe30979 (patch)
tree30b24d20c29e696723125a3c7a423958e1a76608 /FS/FS/cust_payby.pm
parent5f4d0e8ad92e9377d996ca7c709f528606f8a1db (diff)
RT#37632 Credit card validation [bug fixes]
Diffstat (limited to 'FS/FS/cust_payby.pm')
-rw-r--r--FS/FS/cust_payby.pm16
1 files changed, 15 insertions, 1 deletions
diff --git a/FS/FS/cust_payby.pm b/FS/FS/cust_payby.pm
index ec4eb7a..50d9ee0 100644
--- a/FS/FS/cust_payby.pm
+++ b/FS/FS/cust_payby.pm
@@ -636,7 +636,21 @@ sub verify {
my %opt = ();
- $opt{$_} = $self->$_() for qw( payinfo payname paydate );
+ # false laziness with check
+ my( $m, $y );
+ if ( $self->paydate =~ /^(\d{1,2})[\/\-](\d{2}(\d{2})?)$/ ) {
+ ( $m, $y ) = ( $1, length($2) == 4 ? $2 : "20$2" );
+ } elsif ( $self->paydate =~ /^19(\d{2})[\/\-](\d{1,2})[\/\-]\d+$/ ) {
+ ( $m, $y ) = ( $2, "19$1" );
+ } elsif ( $self->paydate =~ /^(20)?(\d{2})[\/\-](\d{1,2})[\/\-]\d+$/ ) {
+ ( $m, $y ) = ( $3, "20$2" );
+ } else {
+ return "Illegal expiration date: ". $self->paydate;
+ }
+ $m = sprintf('%02d',$m);
+ $opt{paydate} = "$y-$m-01";
+
+ $opt{$_} = $self->$_() for qw( payinfo payname paycvv );
if ( $self->locationnum ) {
my $cust_location = $self->cust_location;