/**
* @static dataDesensitization.
* 字符串脱敏处理
*
* @param string $string 需要处理的字符串
* @param int|string $start 脱敏开始字符串或者开始位置
* @param int|string $length 脱敏长度
* @param string $re 长度一位的情况则根据脱敏长度去替换,长度大于一位则不论脱敏长度多少都替换成给入的值
*
* @return string
*
* author: liuml
*/
function dataDesensitization(string $string, $start = 0, $length = -1, string $re = '*'): string
{
if (empty($string)) {
return '';
}
if (is_string($start)) {
$start = mb_strpos($string, $start);
}
if (is_string($length)) {
$length = mb_strpos($string, $length) - $start;
// 防止此类极端情况:(dataDesensitization('aa@qq.com', 3, '@', '******') output:// aa@******@qq.com)
// 此处<0的情况需另外处理,将start参数重置为1 重置后 output:// a******@qq.com
if ($length < 0) {
$length = $length + $start - 1;
$start = 1;
}
}
$str = mb_substr($string, 0, $start);
$strBengin = mb_substr($string, $start + $length);
if (mb_strlen($re) === 1) {
$re = str_pad($re, $length, $re);
}
return $str . $re . $strBengin;
}
09-28
364