Java名称脱敏

在开发中,我们经常需要处理敏感数据,如姓名、手机号码、银行卡号等。为了保护用户的隐私,我们常常需要对这些敏感数据进行脱敏处理。本文将介绍Java中常用的一些名称脱敏方法,并提供代码示例。

1. 姓名脱敏

对于姓名来说,我们通常需要将姓氏保留,将名字脱敏处理。以下是一个示例代码:

public class NameDesensitization {
    public static String desensitize(String fullName) {
        if (fullName == null || fullName.length() < 2) {
            return fullName;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(fullName.charAt(0));
        for (int i = 1; i < fullName.length(); i++) {
            sb.append("*");
        }
        return sb.toString();
    }
}

使用方法如下:

String fullName = "张三";
String desensitizedName = NameDesensitization.desensitize(fullName);
System.out.println(desensitizedName); // 输出:张*

2. 手机号脱敏

对于手机号码,我们通常需要保留前几位和后几位,将中间的数字进行脱敏处理。以下是一个示例代码:

public class PhoneDesensitization {
    public static String desensitize(String phoneNumber) {
        if (phoneNumber == null || phoneNumber.length() != 11) {
            return phoneNumber;
        }
        return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
    }
}

使用方法如下:

String phoneNumber = "13812345678";
String desensitizedPhoneNumber = PhoneDesensitization.desensitize(phoneNumber);
System.out.println(desensitizedPhoneNumber); // 输出:138****5678

3. 银行卡号脱敏

对于银行卡号,我们通常需要保留前几位和后几位,将中间的数字进行脱敏处理。以下是一个示例代码:

public class CardDesensitization {
    public static String desensitize(String cardNumber) {
        if (cardNumber == null || cardNumber.length() < 8) {
            return cardNumber;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(cardNumber.substring(0, 4));
        for (int i = 4; i < cardNumber.length() - 4; i++) {
            sb.append("*");
        }
        sb.append(cardNumber.substring(cardNumber.length() - 4));
        return sb.toString();
    }
}

使用方法如下:

String cardNumber = "622202******1234";
String desensitizedCardNumber = CardDesensitization.desensitize(cardNumber);
System.out.println(desensitizedCardNumber); // 输出:622202******1234

4. 流程图

下面是一个示例流程图,展示了名称脱敏的流程:

flowchart TD
    A[开始] --> B{姓名是否为空或长度小于2}
    B -- 是 --> C[返回原始姓名]
    B -- 否 --> D[取姓氏的第一个字]
    D --> E{是否只有一个字}
    E -- 是 --> F[返回姓氏]
    E -- 否 --> G[生成与名字长度相同的星号]
    G --> H[返回脱敏姓名]
    H --> I[结束]

以上就是Java中常用的一些名称脱敏方法的介绍和示例代码。根据实际需求,可以对这些方法进行修改和扩展,以适应不同的场景。希望本文对您有所帮助!