2020-04-17 18:12:06
围观(3549)
今天遇到个需求, 就是从数据库取出的数据, 好几个字段都需要做隐私保护.
如一个表, 有真实姓名 / 身份证号 / 电话号 / 微信号 / 邮箱 等等 都需要处理隐私保护.
如手机号处理后: 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人脸识别为你的颜值打分