(JAVA) 电话、邮箱脱敏,带脱敏规则

简介: (JAVA) 电话、邮箱脱敏,带脱敏规则

不多说,直接上代码,拷走就能用:

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class PhoneOrEmailUtil {
  /**
   *  脱敏规则——手机号码(手机号码隐藏中间4位数)
   * @Description: 
   * @param telnum
   * @return
   * @ReturnType String
   * @author: zzx
   * @Created 2020年6月2日 上午10:25:10
   */
  public static String phoneNum(String telnum){
    String rtnStr = telnum;
    if(isEmpty(rtnStr)||rtnStr.trim().length()<7){
      return rtnStr;
    }
    rtnStr = rtnStr.trim();
    // 校验是否为电话号码
    String regExp = "^1\\d{10}$";
        Pattern p = Pattern.compile(regExp);  
        Matcher m = p.matcher(rtnStr);  
        if(m.matches()){// 若判断为固话
//          rtnStr = replace(rtnStr,rtnStr.length()-3,"****");
          rtnStr = replace(rtnStr,4,"****");
        }
        return rtnStr;
  }
  
  /**
   *  脱敏规则——邮箱 (@前三位)
   * @Description: 
   * @param str
   * @return
   * @ReturnType String
   * @author: zzx
   * @Created 2020年6月2日 上午10:25:10
   */
  public static String emailNum(String str){
    String rtnStr = str;
    String regExp = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        Pattern p = Pattern.compile(regExp); 
        Matcher matcher = p.matcher(rtnStr);  
        boolean isMatched = matcher.matches(); 
    if(isMatched){
      int s =  rtnStr.indexOf("@");
      if(s >= 6) {
        return replace(rtnStr.trim(), s-3, "****");
      }else if(s >= 3 && s < 6) {
        return replace(rtnStr.trim(), s-1, "**");
      }else {
        return str;
      }
    }else{
      return rtnStr;
    }
  }
  
  /**
   * 脱敏规则
   * @Description: 
   * @param str(需脱敏的字符串) 
   * @param n(脱敏开始位)
   * @param newChar(脱敏掩码)
   * @return
   * @ReturnType String
   * @author: zzx
   * @Created 2020年6月2日 上午10:25:10
   */
  public static String replace (String str,int n,String newChar){ 
    String s1=""; 
    String s2=""; 
    try{
      s1=str.substring(0,n-1); 
      s2=str.substring(n-1+newChar.length(),str.length());
      return s1+newChar+s2;
    }catch(Exception ex){       
      return str;
    } 
  }
  
  /**
   * 判断字符串是否为null || 空字符串
   * 
   * @param param
   * @return
   */
  public static boolean isEmpty(String param) {
    return param == null || "".equals(param.trim());
  }
  public static String replaceChar(String str) {
    String rtnStr = str;
        if(!isEmpty(rtnStr)) {
          String regExp = "^1\\d{10}$";
          Pattern p = Pattern.compile(regExp);  
          Matcher m = p.matcher(rtnStr);          
          
          String regExp2 = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
            Pattern p2 = Pattern.compile(regExp2); 
            Matcher matcher2 = p2.matcher(rtnStr);  
            
          if(m.matches()) {
            rtnStr = phoneNum(str);
          }else if(matcher2.matches()) {
            rtnStr = emailNum(str);
          }         
        }
    return rtnStr;
  }
  public static void main(String args[]) {
    String str = "xxxxxxxxxxx";
    System.out.println(phoneNum(str));
  }
}

文章知识点与官方知识档案匹配,可进一步学习相关知识

相关文章
|
7月前
|
Java
Java 变量命名规则
4月更文挑战第6天
|
7月前
|
存储 Java 开发者
Java变量命名规则
Java变量命名规则
138 0
|
3月前
|
Java 程序员
java基础(5)标识符命名规则和命名规范
Java标识符命名规则包括只能使用数字、字母、下划线\_、$,且数字不能开头,不能使用关键字命名,且严格区分大小写。命名规范建议类名、接口名首字母大写,变量名、方法名首字母小写,常量名全大写。
109 2
|
3月前
|
Java
Java源文件声明规则详解
Java源文件的声明规则是编写清晰、可读且符合语法规范的Java程序的基础。这些规则包括文件名必须与公共类名相同、包声明位于文件顶部、导入声明紧跟其后、类声明需明确访问级别,并允许使用注释增强代码可读性。一个源文件可包含多个类,但只能有一个公共类。遵循这些规则有助于提升代码质量和维护性。
124 28
|
5月前
|
Java 开发者
Java实现基于清除后分配规则的垃圾回收器及其实现原理
通过上述简化模型的实现,我们可以理解基于清除后分配规则的垃圾回收器的基本工作原理。实际上,现代JVM中的垃圾回收器比这个例子复杂得多,它们可能包括更多阶段、优化策略,以及不同类型的垃圾回收器协同工作。然而,理解这一基本概念对于深入理解垃圾回收机制和内存管理非常有帮助。
27 3
|
5月前
|
存储 安全 算法
Java中的数据脱敏与隐私保护技术
Java中的数据脱敏与隐私保护技术
|
7月前
|
存储 安全 Java
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
掌握8条泛型规则,打造优雅通用的Java代码
|
5月前
|
存储 设计模式 监控
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
Java面试题:如何在不牺牲性能的前提下,实现一个线程安全的单例模式?如何在生产者-消费者模式中平衡生产和消费的速度?Java内存模型规定了变量在内存中的存储和线程间的交互规则
53 0
|
5月前
|
监控 Java 开发者
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
Java面试题:解释Java内存模型中的内存顺序规则,Java中的线程组(ThreadGroup)的工作原理,Java中的FutureTask的工作原理
30 0
|
7月前
|
Java
Java | 类、实例初始化 、方法重写规则
Java | 类、实例初始化 、方法重写规则
69 0