diff options
author | Jonathan Prykop <jonathan@freeside.biz> | 2016-05-02 21:44:40 -0500 |
---|---|---|
committer | Jonathan Prykop <jonathan@freeside.biz> | 2016-05-04 00:18:23 -0500 |
commit | 21b9f3f3ff7870d7cd422b98125a9a917fe30979 (patch) | |
tree | 30b24d20c29e696723125a3c7a423958e1a76608 /FS/FS/cust_payby.pm | |
parent | 5f4d0e8ad92e9377d996ca7c709f528606f8a1db (diff) |
RT#37632 Credit card validation [bug fixes]
Diffstat (limited to 'FS/FS/cust_payby.pm')
-rw-r--r-- | FS/FS/cust_payby.pm | 16 |
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; |