思路:前端通过判断是否存在【】来替换掉加密内容,比如手机号实际为180【加密串】0000,页面显示为180****0000。

package util;import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @description: 对证件号等加密解密* @author: ShiHuaHao**/
public class NumEncryptionUtil {/*** 证件号加密* @param content* @return*/public static String cardNumEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}content = cardNumProcess(content);//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() >= 4) {String front = content.substring(0, content.length() - 4);String after = content.substring(content.length() - 4);return "【" + AesUtil.AESEncode(front) + "】" + after;} else {return "【" + AesUtil.AESEncode(content) + "】";}}/*** 证件号解密* @param content* @return*/public static String cardNumDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return cardNumProcess(content);}String frontEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = "";if (content.length() > content.indexOf("】") + 1) {after = content.substring(content.indexOf("】") + 1);}String cardNum = AesUtil.AESDncode(frontEncode) + after;return cardNumProcess(cardNum);}private static String cardNumProcess(String content) {String cardNum = "";if (content != null) {Pattern p = Pattern.compile("\\s*|\t|\r|\n");Matcher m = p.matcher(content);cardNum = m.replaceAll("");}return cardNum.trim();}/*** 电话号加密(小于8位全加密)* @param content* @return*/public static String phoneEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() < 8) {// 如果是非法,则不保存return content;}String front = content.substring(0, 3);String in = content.substring(3, content.length() - 4);String after = content.substring(content.length() - 4);return front + "【" + AesUtil.AESEncode(in) + "】" + after;}/*** 电话号解密* @param content* @return*/public static String phoneDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String front = content.split("【")[0];String inEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.split("】").length < 2  ? "" : content.split("】")[1];return front + AesUtil.AESDncode(inEncode) + after;}/*** 邮箱加密* @param content* @return*/public static String emailEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.lastIndexOf("@") < 0) {return null; // 如果是非法,则不保存}String front = content.substring(0, content.lastIndexOf("@"));String after = content.substring(content.lastIndexOf("@"));return "【" + AesUtil.AESEncode(front) + "】" + after;}/*** 邮箱解密* @param content* @return*/public static String emailDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String frontEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.substring(content.indexOf("】") + 1);return AesUtil.AESDncode(frontEncode) + after;}/*** 银行卡号加密(小于8位全加密)* @param content* @return*/public static String bankCardEncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否已经加密(带【或】表示已经加密)if (content.contains("【") || content.contains("】")) {return content;}if (content.length() < 8) {// 如果是非法,则不保存return null;}String front = content.substring(0, 4);String in = content.substring(4, content.length() - 4);String after = content.substring(content.length() - 4);return front + "【" + AesUtil.AESEncode(in) + "】" + after;}/*** 银行卡号解密* @param content* @return*/public static String bankCardDncode(String content) {if (BeeStringUtil.isEmpty(content)) {return null;}//判断是否是加密的字符串(带【或】表示已经加密)if (!content.contains("【") && !content.contains("】")) {return content;}String front = content.split("【")[0];String inEncode = content.substring(content.indexOf("【") + 1, content.indexOf("】"));String after = content.split("】").length < 2  ? "" : content.split("】")[1];return front + AesUtil.AESDncode(inEncode) + after;}/*** 全文加密加密* @param content* @return*/public static String fullTextEncode(String content) {return BeeBase64.encode(content.getBytes());}/*** 全文加密解密* @param content* @return*/public static String fullTextDncode(String content) throws Exception {return BeeBase64.decode(content);}

手机号证件号等加密方案相关推荐

  1. hive sql 实现姓名手机号证件号脱敏

    需求描述 姓名 中文姓名 2个字码最后一个字 大于等于3个字,只留第一个和最后一个字 英文姓名 保留第一个和最后一个字符 例如 Jack.Antg 脱敏后变成J***.***g 手机号 11位 则保留 ...

  2. c#加密证件号的中间部分,改为*号

    前言 使用场景:在我项目中,我需要给前端提供接口,所以我要吧证件号进行加密.例如:411421199510225612,这是一个身份证号,18为的,那么我加密完成之后就会是 411421******* ...

  3. java中对数据进行脱敏操作(证件号,手机号,移动电话,邮箱)

    **敏感信息处理包括: /*要考虑到证件号是否为身份证号或者学生证,因为数字位数不同全部按身份证的方式托面,第三位至最后四位都进行脱敏操作*/1.证件号非空时第3位到第14位显示时以*号代替2.移动电 ...

  4. 发送短信验证码时间控制,手机号校验,证件号校验

    //发送验证码 var countdown=60;     function sendmsg(){         timeset();         function timeset(){    ...

  5. 前后端分离API接口如何加密 —— AES加密方案

    场景还原:页面中需要展示手机号,身份证号,因为是前后端分离,所有接口API地址有可能暴露,这样不怀好意的人可以拿到个人敏感信息 解决方案: 1. 敏感信息加掩码,例如:接口返回130**12这样的手机 ...

  6. 德云社怒怼信息泄露 300元买600多明星证件号

    德云社微博发布声明书谴责信息买卖. 微博上明星行程动态"超话". 一位信息贩子的朋友圈截图. 德云社怒怼信息泄露 300元买600多明星证件号 "每天都会接到各种骚扰电话 ...

  7. 微信小程序获取绑定授权用户手机号getPhoneNumber-全流程及手机号带*号问题

    微信小程序获取微信绑定授权手机号getPhoneNumber全流程及出现手机号带*号问题详解 微信小程序文档中给出如下示例 获取微信用户绑定的手机号,需先调用login接口. 因为需要用户主动触发才能 ...

  8. 企业微信加密消息体_微信企业号开发之加密方案与全局返回码说明

    本文包含了企业号回调企业时加解密的详细方案.库和示例代码的下载,以及企业号api接口返回的错误码. 一.关于加解密方案的详细说明 1.术语及说明 开启回调模式时,有以下术语需要了解: 1)msg_si ...

  9. ET199加密方案——文件MD5校验

    ET199(http://www.jansh.com.cn/product/detail.php?cid=13)采用安全强度最高的智能卡芯片,硬件不能被复制,多重安全级别,并且集成了16位CPU,8K ...

最新文章

  1. FPGA之道(27)VHDL的操作符号
  2. 玩转虚拟化VMWare之一: VMWare ESXi 5.0和vSphere Client安装和配置
  3. vue单选,多选,多选的内容显示在页面可删除
  4. [loj556][Antileaf's Round]咱们去烧菜吧
  5. “not a single-group group function”
  6. lingo纳什均衡代码_数学建模练习题.
  7. vb adodc连接mysql_VB中用ADODC控件连接ACCESS数据库
  8. 不确定性推理——主观贝叶斯方法matlab实现
  9. 常见关系型数据库(sql server/oracle)查询语句面试题
  10. MATLAB编写m函数理解 y=f(g(x))*h(x)
  11. 864. 二维数组区块计数
  12. python微信刷票代码_微信刷票漏洞详解,Python脚本实现一秒破万!
  13. [C#]Windows服务程序[转载西门吹雪的好文章]
  14. Deep Pyramidal Residual Networks for Spectral-Spatial HSIs Classification(2019)——深度学习论文笔记(二)
  15. 升级光伏供应链体系,供应商系统规范供应商管理,促进企业与供应商高效协同
  16. phpcms v9 二次开发 前台上传图片
  17. 【论文阅读第一期】Goods:Organizing Google’s Datasets总结
  18. 如何使用计算机备用内存,怎样解决emwin7/em备用存储空间占用高-win7 内存占用高,电脑物理内存占用90...
  19. 如何让店铺快速靠前排名
  20. setContentView(R.layout.main)在Android里面,这句话是什么意思?

热门文章

  1. 在庫購買管理(MM)
  2. 关于解决电脑有网络但是浏览器却打不开的解决方法
  3. 海思3518E开发笔记1.6——rootfs及其启动流程分析
  4. 找回XShell保存过的密码
  5. Ubuntu 安装 wine (使用windows下软件)
  6. 如何用百度统计页面中多个链接的pvuv,并且页面还不需要跳转
  7. 【技术分享】单片机模拟NS手柄 半自动完成太鼓达人曲目
  8. 粉碎机无法粉碎文件_宣布《粉碎杂志》
  9. ArcGis制作中国地图(附实验数据)
  10. 国内技术帝不输国外 CryEngine 3引擎下“混血编辑器”诠释究极画质