敏感信息星号处理
项目中经常需要公布一些用户的信息,比如抽奖结果展示,排行榜等。但是很多涉及到用户隐私,比如昵称,姓名,手机号等,这时候就要对用户敏感信息做处理,最常见的就是对手机号加星号处理。方法也非常简单,简单到我再写这篇之前都在考虑要不要发出来。不过还是简单分享一下,如果有兄弟用得上至少可以节省一点时间。
/** * 字符串加指定符号处理 * @param string $str 源字符串 * @param int $start 开头保留长度 * @param int $end 结尾保留长度 * @param string $symbol 指定符号 * @param bool $fullSymbol 是否全处理成指定符号 * @return string */ function secretStr($str, $start = 1 ,$end = 1, $symbol = '*', $fullSymbol = false){ $str = trim($str); $symbol = trim($symbol); if (empty($str)){ return ''; } if(empty($symbol)) $symbol = '*'; if($start < 0) $start = 1; if($end < 0) $end = 1; //mb_strlen — 输入字符串总长度 $strlen = mb_strlen($str, 'utf-8'); //要保留的开头和结尾的总长度 $numLen = $start + $end; if($numLen >= $strlen){ return $str; } if ($fullSymbol) { //如果全处理成指定符号 return str_repeat($symbol, $strlen); } else { //mb_substr — 获取要保留的开头和结尾字符 $firstStr = mb_substr($str, 0, $start, 'utf-8'); $lastStr = mb_substr($str, -1 * $end, $end, 'utf-8'); //str_repeat — 重复一个字符串 return $firstStr . str_repeat($symbol, $strlen - $numLen) . $lastStr; } }
当然了不单单可以处理手机号,其他字符串也是可以的。
echo secretStr('13800138000'); //1*********0 echo secretStr('13800138000',3,4); //138****8000 echo secretStr('13800138000',3,4,'#'); //138####8000 echo secretStr('13800138000',3,4,'*',true); //*********** echo secretStr('abcdef',1,2); //a***ef echo secretStr('江南极客'); //江**客

浙公网安备 33010602011771号