19 digit visa and discover cards
[freeside.git] / FS / FS / cust_payby.pm
index e25d73e..ab3c41c 100644 (file)
@@ -349,7 +349,7 @@ sub check {
 
     my $payinfo = $self->payinfo;
     $payinfo =~ s/\D//g;
-    $payinfo =~ /^(\d{13,16}|\d{8,9})$/
+    $payinfo =~ /^(\d{13,19}|\d{8,9})$/
       or return gettext('invalid_card'); #. ": ". $self->payinfo;
     $payinfo = $1;
     $self->payinfo($payinfo);
@@ -357,14 +357,15 @@ sub check {
       or return gettext('invalid_card'); # . ": ". $self->payinfo;
 
     # see parallel checks in check_payinfo_cardtype & payinfo_Mixin::payinfo_check
-    my $cardtype = '';
+    my $cardtype = $self->paycardtype;
     if ( $self->tokenized ) {
+      $self->('is_tokenized', 'Y'); #so we don't try to do it again
       if ( $self->paymask =~ /^\d+x/ ) {
         $cardtype = cardtype($self->paymask);
       } else {
-        $cardtype = '';
         #return "paycardtype required ".
-        #       "(can't derive from a token and no paymask w/prefix provided)";
+        #       "(can't derive from a token and no paymask w/prefix provided)"
+        #  unless $cardtype;
       }
     } else {
       $cardtype = cardtype($self->payinfo);
@@ -559,6 +560,7 @@ sub check_payinfo_cardtype {
 
   # see parallel checks in cust_payby::check & payinfo_Mixin::payinfo_check
   if ( $self->tokenized($payinfo) ) {
+    $self->set('is_tokenized', 'Y'); #so we don't try to do it again
     if ( $self->paymask =~ /^\d+x/ ) {
       $self->set('paycardtype', cardtype($self->paymask));
     } else {