PHP对银行卡号的几种常见操作

163 阅读1分钟

一、保留银行卡后四位,其他转为星号

1、代码

public function test() {
    $accountArray = [ 12345678, 123456789876543, 123456787654321];

    foreach ($accountArray as &$value) {
        $length = 4; //保留4位
        $count = strlen($value); //账号的长度
        $starNumber = ($count - $length); //*号的个数
        $repeat = str_repeat('*', $starNumber); //把字符串*重复$starNumber次,得到$repeat
        $value = substr_replace($value, $repeat, 0, $starNumber); //把$value从索引0开始,长度为$starNumber;替换成 $repeat
    }

    var_export($accountArray);die;
}

2、打印

array ( 0 => '****5678', 1 => '***********6543', 2 => '***********4321', )

二、获取银行卡后4位

1、代码

public function test() {
    $accountArray = [ 12345678, 123456789876543, 123456787654321];

    foreach ($accountArray as &$value) {
        $value = substr($value, -4);
    }

    var_export($accountArray);die;
}

2、打印

array ( 0 => '5678', 1 => '6543', 2 => '4321', )

三、打散成4个一组,最后一组正常显示,其他的则星号显示

1、代码

public function test() {
    $accountArray = [ 12345678, 123456789876543, 123456787654321];

    $groupNumber = 4; //4个字符一组

    //号码打散成4 4 4组合
    foreach ($accountArray as &$value) {
        $count = strlen($value);
        $yu = $count % $groupNumber;
        $numberCount = ($yu != 0) ? $yu : $groupNumber;  //最后一组显示的数据,正常显示

        $starNumber = ($count-$numberCount); //星号的个数

        $startString = str_repeat('*', $starNumber); //把字符串*重复$starNumber次,得到$startString;

        $hideStr = substr_replace($value, $startString,0, $starNumber); //把$value从索引0开始,长度为$starNumber;替换成 $startString

        $value = str_split($hideStr, 4); //把字符串打散成4个一组的数组
    }

    var_export($accountArray);die;
}

2、打印

array (
  0 => 
  array (
    0 => '****',
    1 => '5678',
  ),
  1 => 
  array (
    0 => '****',
    1 => '****',
    2 => '****',
    3 => '543',
  ),
  2 => 
  array (
    0 => '****',
    1 => '****',
    2 => '****',
    3 => '321',
  ),
)