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

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

先把需要匹配的内容写好相应的正则,然后进行全部匹配遍历。
获取匹配结果数组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编码 函数的更多相关文章

  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. php curl批处理--可控并发异步

    通常情况下 PHP 中的 cURL 是阻塞运行的,就是说创建一个 cURL 请求以后必须等它执行成功或者超时才会执行下一个请求:API接口访问一般会首选CURL 在实际项目或者自己编写小工具(比如新闻 ...

  2. 《Qt数据类型》--QByteArray,QString,int,hex之间的转化

    对于QString和QByteArray,他们都有一个toInt的静态函数,QString::toInt()是根据string的字面值转化为int类型,比如string:"123" ...

  3. 高可用保证消息绝对顺序消费的BROKER设计方案

    转自: http://www.infoq.com/cn/articles/high-availability-broker-design?utm_source=tuicool&utm_medi ...

  4. PCB设计与信号完整性

    之前在设计板卡时,只是听过相关的概念,但是未真正去研究关于SI相关的知识.将之前看过的一些资料整理如下: (1)信号完整性分析 与SI有关的因素:反射,串扰,辐射.反射是由于传输路径上的阻抗不匹配导致 ...

  5. git远程库与本地联系报错fatal: Not a git repository (or any of the parent directories): .git

    在github上新建了一个仓库,然后相与本地的仓库联系起来 $ git remote add origin https://github.com/liona329/learngit.git fatal ...

  6. Unity导入3D模型的过程与方法

    一.介绍 资源是游戏开发中的原材料,也就是组成游戏的模块. Unity只是一个游戏开发引擎,而并不是一个资源开发软件.这就意味着在游戏中需要的资源通常是由一些设计者使用其他软件开发出来的,然后设计者会 ...

  7. Solr系列五:solr搜索详解(solr搜索流程介绍、查询语法及解析器详解)

    一.solr搜索流程介绍 1. 前面我们已经学习过Lucene搜索的流程,让我们再来回顾一下 流程说明: 首先获取用户输入的查询串,使用查询解析器QueryParser解析查询串生成查询对象Query ...

  8. 关于makefile文件研究

    makefile文件采用依赖倒推的模式进行编译. 主要由以下几步构成: 1 申明 2 default 默认生成的对象 3 TARGET 链接过程 4 cpp 编译过程 5 生成一个version.h文 ...

  9. ASP.NET MVC使用Oauth2.0实现身份验证

    随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...

  10. 1. 请问PHP里的ECHO是什么意思 ?请问PHP里的ECHO是什么意思???有什么作用???又应该怎么使用???

    直接输出字符或字符串的意思: 例如:echo "abc"; 就会输出abc echo 'abc' 一样是输出abc . 如果仅仅只输出字符串的话,单引号和双引号是输出内容是一样的, ...