Search code examples
phpzend-frameworkzend-view

masking credit card & bank account information


I'm looking for a php function which can mask credit card & bank information such as routing number and account numbers. I need to mask many formats, so the existing stack overflow answers don't help me that much.

So for example, if the input is 304-443-2456, the function should return xxx-xxx-2456. Sometimes the number has dashes, and can be in various lengths.

I'm looking for something generic, that I can extend as needed, preferably a zend framework view helper class.


Solution

  • Some little regex in a function of it own, configuration available:

    $number = '304-443-2456';
    
    function mask_number($number, $count = 4, $seperators = '-')
    {
        $masked = preg_replace('/\d/', 'x', $number);
        $last = preg_match(sprintf('/([%s]?\d){%d}$/', preg_quote($seperators),  $count), $number, $matches);
        if ($last) {
            list($clean) = $matches;
            $masked = substr($masked, 0, -strlen($clean)) . $clean;
        }
        return $masked;
    }
    
    echo mask_number($number); # xxx-xxx-2456
    

    If the function fails, it will return all masked (e.g. a different seperator, less than 4 digits etc.). Some child-safety build in you could say.

    Demo