车牌、手机、身份证、等敏感信息 屏蔽 替换 、中文转unicode编码 函数
应工作要求,需要对展示的内容进行敏感信息替换。
琢磨的一些时间,编写的函数匹配率还是比较高的。
顺便说下思路,使用的是正则匹配替换和字符串替换。函数可以再改进.
先把需要匹配的内容写好相应的正则,然后进行全部匹配遍历。
获取匹配结果数组A,同时获取匹配规则B,(解决内容有多次符合匹配规则的情况,导致最后替换出现结果一样的问题)
再根据结果A,和结果B,进行内容的真正匹配处理。
代码:
- <?php
- /**
- * 截取内容中的数字,替换为其他
- * @param type $string
- * @param type $lengths
- * @param type $padString
- * @return boolean
- */
- function replace_numeral($string, $lengths = array(), $padString = '*') {
- if (!$string || !$lengths) {
- return false;
- }
- $lengths = !is_array($lengths) ? array($lengths) : $lengths;
- $pattern = $strings = array();
- rsort(&$lengths, SORT_NUMERIC);
- foreach ($lengths as $length) {
- preg_match_all('/\d{' . ((int) $length - 1) . '}[\d|x|X]/', $string, $matches);
- if (isset($matches[0]) && $matches[0]) {
- foreach ($matches[0] as $k => $v) {
- if ($v) {
- $pattern[$k] = '/' . $v . '/';
- $strings[$k] = $v ? str_pad($padString, $length - 4, $padString) . substr($v, -4, 4) : '';
- }
- }
- }
- $string = preg_replace($pattern, $strings, $string);
- }
- return $string;
- }
- /**
- * 替换邮箱
- * @param type $string
- * @param type $length
- * @return boolean
- */
- function replace_mail($string, $length = 3) {
- if (!$string) {
- return false;
- }
- preg_match_all('/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/', $string, $matches);
- foreach ($matches[0] as $k => $v) {
- if (isset($matches[0]) && $matches[0]) {
- foreach ($matches[0] as $k => $v) {
- if ($v) {
- $pattern[$k] = $v;
- $strings[$k] = substr_replace($v, str_pad('*', strpos($v, '@') - $length * 2, '*'), $length, strpos($v, '@') - $length * 2);
- }
- }
- }
- }
- $string = str_replace($pattern, $strings, $string);
- return ($string);
- }
- /**
- * 替换车牌
- * @param type $string
- * @return type
- */
- function replace_vehicle_reg_no($string) {
- $arr_area = array('赣', '桂', '京', '津', '冀', '晋', '蒙', '辽', '吉',
- '黑', '沪', '苏', '浙', '皖', '闽', '鲁', '豫', '鄂',
- '湘', '粤', '琼', '渝', '川', '贵', '云', '藏', '陕',
- '甘', '青', '宁', '新');
- foreach ($arr_area AS $k => $v) {
- preg_match_all('/' . $v . '[a-zA-Z]{1}[a-zA-Z0-9]{5}/', $string, $matches);
- if (isset($matches[0]) && $matches[0]) {
- foreach ($matches[0] as $va) {
- if ($va) {
- $pattern[$k] = '/' . $va . '/';
- $strings[$k] = substr_replace($va, '**', -4, 2);
- }
- }
- $string = preg_replace($pattern, $strings, $string);
- }
- }
- return $string;
- }
- /**
- * 替换车架号
- * @param type $string
- * @param type $lengths
- * @param type $padString
- * @return boolean
- */
- function replace_vin($string) {
- if (!$string) {
- return false;
- }
- $pattern = $strings = array();
- preg_match_all('/[a-zA-Z0-9]{1,11}[0-9]{5}[\d|x|X]/', $string, $matches);
- if (isset($matches[0]) && $matches[0]) {
- foreach ($matches[0] as $k => $v) {
- if ($v) {
- $pattern[$k] = '/' . $v . '/';
- $strings[$k] = substr_replace($v, '******', 6, 5);
- }
- }
- }
- $string = preg_replace($pattern, $strings, $string);
- return $string;
- }
- ?>
再弄一个转换汉字为unicode编码(十六进制)的函数
- <?php
- function unicode_encode($name) {
- $name = iconv('UTF-8', 'UCS-2', $name);
- $len = strlen($name);
- $str = '';
- for ($i = 0; $i < $len - 1; $i = $i + 2) {
- $c = $name[$i];
- $c2 = $name[$i + 1];
- if (ord($c) > 0) { // 两个字节的文字
- $str .= '\u' . base_convert(ord($c), 10, 16) . base_convert(ord($c2), 10, 16);
- } else {
- $str .= $c2;
- }
- }
- return $str;
- }
- function unicode_decode($name) {
- // 转换编码,将Unicode编码转换成可以浏览的utf-8编码
- $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
- preg_match_all($pattern, $name, $matches);
- if (!empty($matches)) {
- $name = '';
- for ($j = 0; $j < count($matches[0]); $j++) {
- $str = $matches[0][$j];
- if (strpos($str, '\\u') === 0) {
- $code = base_convert(substr($str, 2, 2), 16, 10);
- $code2 = base_convert(substr($str, 4), 16, 10);
- $c = chr($code) . chr($code2);
- $c = iconv('UCS-2', 'UTF-8', $c);
- $name .= $c;
- } else {
- $name .= $str;
- }
- }
- }
- return $name;
- }
- ?>
车牌、手机、身份证、等敏感信息 屏蔽 替换 、中文转unicode编码 函数的更多相关文章
- 【转】Android应用开发allowBackup敏感信息泄露的一点反思
转载:http://blog.csdn.net/yanbober/article/details/46417531 1 背景 其实这篇文章可能有些小题大作,但回过头想想还是很有必要的,有点阴沟里翻船的 ...
- Android应用开发allowBackup敏感信息泄露的一点反思
1 背景 [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 事实上这篇文章可能有些小题大作,但回过头想想还是非常有必要的,有点阴沟里翻船的感觉. ...
- Spring拓展接口之BeanFactoryPostProcessor,占位符与敏感信息解密原理
前言 开心一刻 一只被二哈带偏了的柴犬,我只想弄死隔壁的二哈 what:是什么 BeanFactoryPostProcessor接口很简单,只包含一个方法 /** * 通过BeanFactoryPos ...
- Spring Boot: 加密应用配置文件敏感信息
Spring Boot: 加密应用配置文件敏感信息 背景 我们的应用之前使用的是Druid数据库连接池,由于需求我们迁移到HikariCP连接池,druid 数据源加密提供了多种方式: 可以在配置文件 ...
- 如何删除GIT仓库中的敏感信息
如何删除GIT仓库中的敏感信息 正常Git仓库中应该尽量不包含数据库连接/AWS帐号/巨大二进制文件,否则一旦泄漏到Github,这些非常敏感信息会影响客户的信息安全已经公司的信誉.公司可能其它还有相 ...
- 利用数据库视图实现WEB查询敏感信息接口动态脱敏
前言: 利用数据库视图,实现web接口查询敏感信息时动态脱敏. 具体目标:某接口为用户信息查询接口,返回敏感用户信息(id,姓名.手机号[敏感].身份证号[敏感]),如果web用户为管理员角色,则查询 ...
- 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密|原创
前言 出于安全考虑,现需要将数据库的中敏感信息加密存储到数据库中,但是正常业务交互还是需要使用明文数据,所以查询返回我们还需要经过相应的解密才能返回给调用方. ps:日常开发中,我们要有一定的安全意识 ...
- 怎么在执行Python脚本时,密码等敏感信息也不让它出现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http ...
- DotNet隐藏敏感信息操作方法
在项目中,有时候一些信息不便完全显示,只需要显示部分信息.现在提供一些隐藏敏感信息的操作方法,主要为对信息的截取操作: 1.指定左右字符数量,中间的*的个数和实际长度有关: /// <summa ...
随机推荐
- SpringCloudConfig与SpringCloudEureka 注册中心与配置中心高可用的意义
所有的配置会缓存在本地,远程配置中心DOWN机,不影响本地使用,只是无法重新请求服务端获取配置的更新. 不管是注册中心的高可用,还是配置中心的高可用.本质上都是保证服务能注册上去或者能从配置中心获取配 ...
- LDAP none、simple、strong 笔记
// 该笔记仍在调研中!!不确保中有错误信息!最终目的是想用java实现这三种认证方式. 1.ldaps:// 注意多了个s 参考:https://mail.python.org/pipermail ...
- js dom 创建table标签和子属性, 以及创建多选框
代码: <div class="Category"> <span id="Edit_headerTitle">Edit Categori ...
- 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于star ...
- SpringBoot系列六:SpringBoot整合Tomcat
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合 Tomcat 2.背景 SpringBoot 本身支持有两类的 WEB 容器:默认的 To ...
- Mybatis系列(三):Mybatis实现关联表查询
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...
- 使用Maven创建Java项目
在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...
- unity3d-----Collider 组件参考
Collider 组件参考 点击 属性检查器 下面的 添加组件 按钮,然后从 添加碰撞组件 中选择需要的 Collider 组件,即可添加 Collider组件到节点上. Collider 组件属性 ...
- (原)tslib的交叉编译
今天准备重新来交叉编译qt5.3.1的源码,由于按网上说的,需要先编译tslib,所以拿起来之前的编译源码,打算重新用新的交叉编译工具再次编译一次,在查找资料的过程中浪费了些许时间.其实直接就在使用s ...
- android http json请求3种不同写法
第一种: public static String invoke() { String result = null; try { final Str ...