曾几何时有个脱敏需求,对用户名称进行脱敏处理,使用了如下代码
if($list[$i]['nickname']){
if (ord($list[$i]['nickname'])>128){
$list[$i]['nickname'] = mb_convert_encoding(substr_replace(substr_replace($list[$i]['nickname'],'*',3,3),'*',4,3), 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');
}else{
$list[$i]['nickname'] = mb_convert_encoding(substr_replace(substr_replace($list[$i]['nickname'],"*",1,1),"*",2,3), 'UTF-8', 'UTF-8,GBK,GB2312,BIG5');
}
}
上线后发现用户真的是千奇百怪,导致出问题,于是有了如下这个方法进行封装更好的处理脱敏
function actionIndex($string, $start = 0, $length = 0, $re = '*'){
if(empty($string) || empty($length) || empty($re)) return $string;
$end = $start + $length;
$strlen = mb_strlen($string);
$str_arr = array();
for($i=0; $i<$strlen; $i++) {
if($i>=$start && $i<$end)
$str_arr[] = $re;
else
$str_arr[] = mb_substr($string, $i, 1);
}
return implode('',$str_arr);
}
//测试代码
function actionTest(){
$name = '大幅ddddd';
$mobile = '13817558198';
$name = $this->actionIndex($name,1,2);
$mobile = $this->actionIndex($mobile,3,4);
var_dump($name);
var_dump($mobile);
}
效果很ok,如果有全局需求可以参考这个:PHP数据脱敏包: 数据脱敏工具,可以对特定的键按照配置进行数据脱敏,也就是替换操作。支持Composer。