应工作要求,需要对展示的内容进行敏感信息替换。
琢磨的一些时间,编写的函数匹配率还是比较高的。

顺便说下思路,使用的是正则匹配替换和字符串替换。函数可以再改进.

先把需要匹配的内容写好相应的正则,然后进行全部匹配遍历。
获取匹配结果数组A,同时获取匹配规则B,(解决内容有多次符合匹配规则的情况,导致最后替换出现结果一样的问题)

再根据结果A,和结果B,进行内容的真正匹配处理。

代码:

  1. <?php
  2.  
  3. /**
  4. * 截取内容中的数字,替换为其他
  5. * @param type $string
  6. * @param type $lengths
  7. * @param type $padString
  8. * @return boolean
  9. */
  10. function replace_numeral($string, $lengths = array(), $padString = '*') {
  11. if (!$string || !$lengths) {
  12. return false;
  13. }
  14.  
  15. $lengths = !is_array($lengths) ? array($lengths) : $lengths;
  16.  
  17. $pattern = $strings = array();
  18.  
  19. rsort(&$lengths, SORT_NUMERIC);
  20.  
  21. foreach ($lengths as $length) {
  22. preg_match_all('/\d{' . ((int) $length - 1) . '}[\d|x|X]/', $string, $matches);
  23. if (isset($matches[0]) && $matches[0]) {
  24. foreach ($matches[0] as $k => $v) {
  25. if ($v) {
  26. $pattern[$k] = '/' . $v . '/';
  27. $strings[$k] = $v ? str_pad($padString, $length - 4, $padString) . substr($v, -4, 4) : '';
  28. }
  29. }
  30. }
  31. $string = preg_replace($pattern, $strings, $string);
  32. }
  33.  
  34. return $string;
  35. }
  36.  
  37. /**
  38. * 替换邮箱
  39. * @param type $string
  40. * @param type $length
  41. * @return boolean
  42. */
  43. function replace_mail($string, $length = 3) {
  44. if (!$string) {
  45. return false;
  46. }
  47. preg_match_all('/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/', $string, $matches);
  48.  
  49. foreach ($matches[0] as $k => $v) {
  50. if (isset($matches[0]) && $matches[0]) {
  51. foreach ($matches[0] as $k => $v) {
  52. if ($v) {
  53. $pattern[$k] = $v;
  54. $strings[$k] = substr_replace($v, str_pad('*', strpos($v, '@') - $length * 2, '*'), $length, strpos($v, '@') - $length * 2);
  55. }
  56. }
  57. }
  58. }
  59.  
  60. $string = str_replace($pattern, $strings, $string);
  61. return ($string);
  62. }
  63.  
  64. /**
  65. * 替换车牌
  66. * @param type $string
  67. * @return type
  68. */
  69. function replace_vehicle_reg_no($string) {
  70. $arr_area = array('赣', '桂', '京', '津', '冀', '晋', '蒙', '辽', '吉',
  71. '黑', '沪', '苏', '浙', '皖', '闽', '鲁', '豫', '鄂',
  72. '湘', '粤', '琼', '渝', '川', '贵', '云', '藏', '陕',
  73. '甘', '青', '宁', '新');
  74. foreach ($arr_area AS $k => $v) {
  75. preg_match_all('/' . $v . '[a-zA-Z]{1}[a-zA-Z0-9]{5}/', $string, $matches);
  76. if (isset($matches[0]) && $matches[0]) {
  77. foreach ($matches[0] as $va) {
  78. if ($va) {
  79. $pattern[$k] = '/' . $va . '/';
  80. $strings[$k] = substr_replace($va, '**', -4, 2);
  81. }
  82. }
  83.  
  84. $string = preg_replace($pattern, $strings, $string);
  85. }
  86. }
  87.  
  88. return $string;
  89. }
  90.  
  91. /**
  92. * 替换车架号
  93. * @param type $string
  94. * @param type $lengths
  95. * @param type $padString
  96. * @return boolean
  97. */
  98. function replace_vin($string) {
  99. if (!$string) {
  100. return false;
  101. }
  102.  
  103. $pattern = $strings = array();
  104. preg_match_all('/[a-zA-Z0-9]{1,11}[0-9]{5}[\d|x|X]/', $string, $matches);
  105. if (isset($matches[0]) && $matches[0]) {
  106. foreach ($matches[0] as $k => $v) {
  107. if ($v) {
  108. $pattern[$k] = '/' . $v . '/';
  109. $strings[$k] = substr_replace($v, '******', 6, 5);
  110. }
  111. }
  112. }
  113. $string = preg_replace($pattern, $strings, $string);
  114.  
  115. return $string;
  116. }
  117. ?>

再弄一个转换汉字为unicode编码(十六进制)的函数

  1. <?php
  2. function unicode_encode($name) {
  3. $name = iconv('UTF-8', 'UCS-2', $name);
  4. $len = strlen($name);
  5. $str = '';
  6. for ($i = 0; $i < $len - 1; $i = $i + 2) {
  7. $c = $name[$i];
  8. $c2 = $name[$i + 1];
  9. if (ord($c) > 0) { // 两个字节的文字
  10. $str .= '\u' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);
  11. } else {
  12. $str .= $c2;
  13. }
  14. }
  15. return $str;
  16. }
  17.  
  18. function unicode_decode($name) {
  19. // 转换编码,将Unicode编码转换成可以浏览的utf-8编码
  20. $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
  21. preg_match_all($pattern, $name, $matches);
  22. if (!empty($matches)) {
  23. $name = '';
  24. for ($j = 0; $j < count($matches[0]); $j++) {
  25. $str = $matches[0][$j];
  26. if (strpos($str, '\\u') === 0) {
  27. $code = base_convert(substr($str, 2, 2), 16, 10);
  28. $code2 = base_convert(substr($str, 4), 16, 10);
  29. $c = chr($code) . chr($code2);
  30. $c = iconv('UCS-2', 'UTF-8', $c);
  31. $name .= $c;
  32. } else {
  33. $name .= $str;
  34. }
  35. }
  36. }
  37. return $name;
  38. }
  39. ?>

车牌、手机、身份证、等敏感信息 屏蔽 替换 、中文转unicode编码 函数的更多相关文章

  1. 【转】Android应用开发allowBackup敏感信息泄露的一点反思

    转载:http://blog.csdn.net/yanbober/article/details/46417531 1 背景 其实这篇文章可能有些小题大作,但回过头想想还是很有必要的,有点阴沟里翻船的 ...

  2. Android应用开发allowBackup敏感信息泄露的一点反思

    1 背景 [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 事实上这篇文章可能有些小题大作,但回过头想想还是非常有必要的,有点阴沟里翻船的感觉. ...

  3. Spring拓展接口之BeanFactoryPostProcessor,占位符与敏感信息解密原理

    前言 开心一刻 一只被二哈带偏了的柴犬,我只想弄死隔壁的二哈 what:是什么 BeanFactoryPostProcessor接口很简单,只包含一个方法 /** * 通过BeanFactoryPos ...

  4. Spring Boot: 加密应用配置文件敏感信息

    Spring Boot: 加密应用配置文件敏感信息 背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件 ...

  5. 如何删除GIT仓库中的敏感信息

    如何删除GIT仓库中的敏感信息 正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉.公司可能其它还有相 ...

  6. 利用数据库视图实现WEB查询敏感信息接口动态脱敏

    前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...

  7. 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创

    前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...

  8. 怎么在执行Python脚本时,密码等敏感信息也不让它出现

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...

  9. DotNet隐藏敏感信息操作方法

    在项目中,有时候一些信息不便完全显示,只需要显示部分信息.现在提供一些隐藏敏感信息的操作方法,主要为对信息的截取操作: 1.指定左右字符数量,中间的*的个数和实际长度有关: /// <summa ...

随机推荐

  1. SpringCloudConfig与SpringCloudEureka 注册中心与配置中心高可用的意义

    所有的配置会缓存在本地,远程配置中心DOWN机,不影响本地使用,只是无法重新请求服务端获取配置的更新. 不管是注册中心的高可用,还是配置中心的高可用.本质上都是保证服务能注册上去或者能从配置中心获取配 ...

  2. LDAP none、simple、strong 笔记

    // 该笔记仍在调研中!!不确保中有错误信息!最终目的是想用java实现这三种认证方式. 1.ldaps://  注意多了个s 参考:https://mail.python.org/pipermail ...

  3. js dom 创建table标签和子属性, 以及创建多选框

    代码: <div class="Category"> <span id="Edit_headerTitle">Edit Categori ...

  4. 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

    第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...

  5. SpringBoot系列六:SpringBoot整合Tomcat

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合 Tomcat 2.背景 SpringBoot 本身支持有两类的 WEB 容器:默认的 To ...

  6. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  7. 使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

  8. unity3d-----Collider 组件参考

    Collider 组件参考 点击 属性检查器 下面的 添加组件 按钮,然后从 添加碰撞组件 中选择需要的 Collider 组件,即可添加 Collider组件到节点上. Collider 组件属性 ...

  9. (原)tslib的交叉编译

    今天准备重新来交叉编译qt5.3.1的源码,由于按网上说的,需要先编译tslib,所以拿起来之前的编译源码,打算重新用新的交叉编译工具再次编译一次,在查找资料的过程中浪费了些许时间.其实直接就在使用s ...

  10. android http json请求3种不同写法

    第一种: public static String invoke() {        String result = null;        try {             final Str ...