diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/Conf.pm | 17 | ||||
| -rw-r--r-- | FS/FS/payinfo_Mixin.pm | 14 | 
2 files changed, 27 insertions, 4 deletions
| diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index 40d3a6bc5..e87093c50 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -2237,6 +2237,23 @@ worry that config_items is freeside-specific and icky.                       ],    }, +  { +    'key'         => 'card_masking_method', +    'section'     => 'UI', +    'description' => 'Digits to display when masking credit cards.  Note that the first six digits are necessary to canonically identify the credit card type (Visa/MC, Amex, Discover, Maestro, etc.) in all cases.  The first four digits can identify the most common credit card types in most cases (Visa/MC, Amex, and Discover).  The first two digits can distinguish between Visa/MC and Amex.', +    'type'        => 'select', +    'select_hash' => [ +                       ''            => '123456xxxxxx1234', +                       'first6last2' => '123456xxxxxxxx12', +                       'first4last4' => '1234xxxxxxxx1234', +                       'first4last2' => '1234xxxxxxxxxx12', +                       'first2last4' => '12xxxxxxxxxx1234', +                       'first2last2' => '12xxxxxxxxxxxx12', +                       'first0last4' => 'xxxxxxxxxxxx1234', +                       'first0last2' => 'xxxxxxxxxxxxxx12', +                     ], +  }, +  );  1; diff --git a/FS/FS/payinfo_Mixin.pm b/FS/FS/payinfo_Mixin.pm index 2d7b4ffe0..15c4e3979 100644 --- a/FS/FS/payinfo_Mixin.pm +++ b/FS/FS/payinfo_Mixin.pm @@ -160,10 +160,16 @@ sub mask_payinfo {    } else {      # if not, mask it...      if ($payby eq 'CARD' || $payby eq 'DCRD' || $payby eq 'MCRD') { -      # Credit Cards (Show first and last four) -      $paymask = substr($payinfo,0,6). -                 'x'x(length($payinfo)-10). -                 substr($payinfo,(length($payinfo)-4)); +      # Credit Cards +      my $conf = new FS::Conf; +      my $mask_method = $conf->config('card_masking_method') || 'first6last4'; +      $mask_method =~ /^first(\d+)last(\d+)$/ +        or die "can't parse card_masking_method $mask_method"; +      my($first, $last) = ($1, $2); + +      $paymask = substr($payinfo,0,$first). +                 'x'x(length($payinfo)-$first-$last). +                 substr($payinfo,(length($payinfo)-$last));      } elsif ($payby eq 'CHEK' || $payby eq 'DCHK' ) {        # Checks (Show last 2 @ bank)        my( $account, $aba ) = split('@', $payinfo ); | 
