2020-04-17 18:12:06
围观(4308)
今天遇到个需求, 就是从数据库取出的数据, 好几个字段都需要做隐私保护.
如一个表, 有真实姓名 / 身份证号 / 电话号 / 微信号 / 邮箱 等等 都需要处理隐私保护.
如手机号处理后: 136****0000 邮箱: 12**56@qq.com
本想着应该会有挺多这种轮子的, 但是随便搜了一下之后发现, 好多都是简单的取了字符串开头几个和结尾几个, 中间就用 * 替换掉而已. 这种并不能通用.
比如邮箱取首尾去除中间, 那邮箱的域名都没了...
因为这个特殊需求, 写了一段处理字符串隐私的:
function hidden_string($string)
{
$at_location = mb_strpos($string, '@');
if ($at_location) {
$email_domain = mb_substr($string, $at_location);
$string = mb_substr($string, 0, $at_location);
}
$string_length = mb_strlen($string);
$segment = round($string_length / 3);
$start_string = mb_substr($string, 0, $segment);
$hidden = '';
for ($i = 0; $i < $segment; $i++) {
$hidden .= '*';
}
$start_length = mb_strlen($start_string . $hidden);
$end_string = mb_substr($string, $start_length);
if (isset($email_domain)) {
return $start_string . $hidden . $end_string . $email_domain;
}
return $start_string . $hidden . $end_string;
}
echo hidden_string(13622222222);
// 1362****222
echo hidden_string(440111111111111111);
// 440111******111111
echo hidden_string('123456@qq.com');
// 12**56@qq.com
echo hidden_string('123456789@qq.com');
// 123***789@qq.com
echo hidden_string('这是一段内容');
// 这是**内容这段代码虽然能实现大部分需求, 但是手机号处理和身份证处理还是不完美的.
手机号处理更应该是显示前三位和后面四位, 身份证隐藏了中间一段出生年和月, 如果知道对方出生 那身份证号也暴露了.
代码还可以继续优化, 正则应该也能处理, 但是.. 又不是不能用.
本文地址 : bubaijun.com/page.php?id=172
版权声明 : 未经允许禁止转载!
上一篇文章: PHP实现礼品奖池抽奖
下一篇文章: PHP人脸识别为你的颜值打分