- if ($self->is_encrypted($payinfo)) {
- $paymask = 'N/A';
- } 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,4). 'x'x(length($payinfo)-8). substr($payinfo,(length($payinfo)-4));
- } elsif ($payby eq 'CHEK' ||
- $payby eq 'DCHK' ) { # Checks (Show last 2 @ bank)
+ if ( ref($self) && $self->is_encrypted($payinfo) ) {
+ return 'N/A';
+ } elsif ( $payinfo =~ /^99\d{14}$/ || $payinfo eq 'N/A' ) { #token
+ return 'N/A (tokenized)'; #?
+ } else { # if not, mask it...
+
+ if ($payby eq 'CARD' || $payby eq 'DCRD' || $payby eq 'MCRD') {
+
+ # Credit Cards
+
+ # special handling for Local Isracards: always show last 4
+ if ( $payinfo =~ /^(\d{8,9})$/ ) {
+
+ return 'x'x(length($payinfo)-4).
+ substr($payinfo,(length($payinfo)-4));
+
+ }
+
+ 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);
+
+ return 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)