From 21b9f3f3ff7870d7cd422b98125a9a917fe30979 Mon Sep 17 00:00:00 2001 From: Jonathan Prykop Date: Mon, 2 May 2016 21:44:40 -0500 Subject: RT#37632 Credit card validation [bug fixes] --- FS/FS/cust_payby.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'FS/FS/cust_payby.pm') 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; -- cgit v1.1