<?phpclass Mask
{const CARD = 1;     //身份证const PHONE = 2;    //手机号const NAME = 3;     //姓名/*** Notes: 脱敏格式化字符串* @param string $str 需要脱敏字符* @param $type 内容类型* @return mixed|string*/private function formatData($str, $type){$res = '';if (empty($str) || empty($type)) {return $res;}$len = strlen($str);switch ($type) {case self::CARD:$res = substr_replace($str, str_repeat('*', ($len - 8)), 6, $len - 8);break;case self::PHONE:$res = substr_replace($str, str_repeat('*', ($len - 7)), 7, $len - 7);break;case self::NAME:$res = $this->formatName($str);break;default :$res = $str;break;}return $res;}/*** Notes: 批量脱敏格式化数据* @param array $data 格式化字符数组* @param $type 内容类型* @return array|mixed*/private function bacthFormatData($data, $type){$ret = [];if (empty($data) || !is_array($data) || empty($type)) {return $ret;}switch ($type) {case self::CARD :foreach ($data as $item){$len = strlen($item);$ret[$item] = substr_replace($item, str_repeat('*', ($len - 8)), 6, $len - 8);}break;case self::PHONE :foreach ($data as $item) {$len = strlen($item);$ret[$item] = substr_replace($item, str_repeat('*', ($len - 7)), 3, $len - 7);}break;case self::NAME :foreach ($data as $item) {$ret[$item] = $this->formatName($item);}break;default :$ret = $data;break;}return $ret;}/*** Notes:脱敏格式化名称* @param $str 需要脱敏字符* @return mixed|string*/private function formatName($str){$res = '';if (empty($str)) {return $res;}$len = mb_strlen($str);$res = $str;if ($len == 2){$res = $this->stringTrim($res, '*', 0, 1);} elseif ($len == 3) {$res = $this->stringTrim($res, '*', 0, 1, 1, 1);} elseif ($len > 3 && $len <= 6) {$res = $this->stringTrim($res, '*', 0, 1, 2, 2);} elseif ($len > 6) {$res = $this->stringTrim($res, '*', 0, 2, 3, 3);}return $res;}/*** Notes:中文脱敏替换* @param $str 脱敏字符* @param string $replace 替换字符* @param int $start 头部位置* @param int $startLen 头部替换长度* @param int $end 尾部位置* @param int $endLen 尾部替换长度* @return string*/private function stringTrim($str, $replace = '*', $start = 0, $startLen = 0, $end = 0, $endLen = 0){$str = mb_substr($str, $start, $startLen) . str_repeat($replace, (mb_strlen($str) - ($startLen + $endLen))) .mb_substr($str, -$end, $endLen);return $str;}/*** Notes:数据脱敏格式化* @param array|string $datas 需要格式化的数据内容* @param int $type 内容类型 1:身份证,2:手机号,3:姓名* @return array|mixed|string|string[]*/public function dataMark($datas, $type = self::NAME){if (!is_array($datas)) {return $this->formatData($datas, $type);}return $this->bacthFormatData($datas, $type);}}//调用测试demo
$mask = new Mask();
$name = '我是中文名称';
$card = '333333333333333333';
$phone = '15012345678';$names = ['我是中文名称1', '我是中文名称2'];
$cards = ['333333333333333333', '222222222222222222'];
$phones = ['15012345678', '13012345678'];echo "<pre>";echo $mask->dataMark($card, 1)."</br>";
echo $mask->dataMark($phone, 2)."</br>";
echo $mask->dataMark($name, 3)."</br>";print_r($mask->dataMark($cards, 1));
print_r($mask->dataMark($phones, 2));
print_r($mask->dataMark($names, 3));echo "</pre>";

结果展示

身份证,手机号,姓名 脱敏格式化处理相关推荐

  1. js 常用正则校验(身份证/手机号/姓名...)

    //身份证校验 const IDReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|3 ...

  2. vue身份证号、手机号、姓名脱敏处理

    姓名脱敏: 2位到5位以上的不同处理 hideInsurantName (val) {if (!val || val === '') return ''let name = ''if (val.len ...

  3. mysql对姓名、手机号、身份证号做脱敏处理

    SELECT #phone手机号脱敏处理IF( phone='', '', CONCAT(LEFT(phone, 3), '****', RIGHT(phone,4))) AS dephone,#ca ...

  4. vue 身份证号、手机号、姓名脱敏处理( * 显示)

    姓名脱敏: 2位到5位以上的不同处理 hideInsurantName (val) {if (!val || val === '') return ''let name = ''if (val.len ...

  5. js、vue、手机号、身份证号、姓名脱敏

    目录 1.直接在插值表达式中操作数据: 示例代码如下(身份证号脱敏): 示例代码如下(手机号脱敏): 示例代码如下(姓名脱敏): js示例: 2.几种常见的脱敏方式: slice() substrin ...

  6. 身份证、姓名、手机号、地址、邮箱脱敏处理

    1.身份证脱敏:显示后4位 public static String tmCardCode(String cardId) {if (null == cardId || cardId.length() ...

  7. 手机号码中间4位|身份证号码|姓名,脱敏处理,星号*代替!

    项目中用到的数据脱敏处理Function,没什么墨水,都是项目里拷贝出来保存的. // 姓名脱敏 function hideName(str) {if (null != str && ...

  8. Java 姓名脱敏的一点点改进 针对大于三个字 或叠字

    public class IdUtils {private static final int LENGTH_1 = 1;private static final int LENGTH_2 = 2;/* ...

  9. vue常用的时间、手机号等的格式化方法

    vue常用的时间.手机号等的格式化方法 /*** 手机号格式化*/ export function phoneFilter(val) {let str = "";str = val ...

最新文章

  1. 南方医科大学珠江医院检验医学部生物信息分析师招聘启示
  2. 【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试
  3. Selenium3+MySQL数据库进行数据驱动测试
  4. android jenkins 配置NDK环境变量
  5. [转载] linux cgroup
  6. 快速搭建springmvc+spring data jpa工程
  7. native react 更新机制_React Native - 组件的生命周期详解(附:各阶段调用的方法)...
  8. 高级版本VS打开低版本VS工程,无法调试的问题
  9. 第23章 排序算法(包括merge等)
  10. el-tree多选获取选中的节点ID
  11. CentOS 7.4 安装Teamviewer 14
  12. UML用例图分析——铁路售票系统
  13. 收藏!这10部关于数学的顶级纪录片,告诉孩子数学跟枯燥不沾边!
  14. 微信小程序弹框显示自定义内容(1)
  15. 实际成本调整(R12)
  16. 计算机科学与技术班级,学院计算机科学与技术学院专业班级计算机科学与技术.doc...
  17. P2P网贷行业的新征程
  18. IC设计中的glitch free时钟切换
  19. ssm+Vue计算机毕业设计益学(程序+LW文档)
  20. 计算机无法识别u盘,详解电脑不识别u盘

热门文章

  1. 绕开邮件服务器的垃圾检测
  2. creator 静态属性_GitHub - sunjianhua/dbcxx: 快速处理静态数据
  3. AVS3代码阅读HPM4.0(更新中)
  4. 2015年律师行业就业前景分析
  5. 大数据如何重塑传统银行?
  6. java车队版team,让我们一起认识下 Team CCC车队的环法战车
  7. js中的枚举和不可枚举
  8. 搞笑幽默get技能,调侃,好网站
  9. C# ??(问问,问号问号)运算符,可空值(申明加?(问号))的克星
  10. 来,让携程技术人带你“看”世界——2020携程技术年度盛典侧记