Java手机号脱敏工具类

引言

在现代社会中,手机号已经成为人们日常生活中必不可少的一部分。然而,由于隐私保护的需要,我们有时需要对手机号进行脱敏处理,以防止手机号泄露带来的潜在风险。本文将介绍一种基于Java的手机号脱敏工具类,以帮助开发者快速、安全地处理手机号脱敏。

脱敏原理

手机号脱敏的核心原理是将手机号码的敏感部分替换为其他字符或符号,以隐藏真实的手机号码。在脱敏过程中,我们通常需要保留一部分手机号码,如前三位和后四位。因此,脱敏工具类需要具备以下功能:

  1. 校验手机号格式的正确性
  2. 脱敏手机号
  3. 保留手机号的部分信息

下面我们将逐步实现这些功能。

校验手机号格式

在对手机号进行脱敏之前,我们需要确保手机号的格式是正确的。通常,手机号的格式为11位数字,并且以1开头。我们可以使用正则表达式来校验手机号的格式,以下是一个简单的代码示例:

import java.util.regex.Pattern;

public class PhoneNumberUtils {
    private static final Pattern PHONE_PATTERN = Pattern.compile("1\\d{10}");

    public static boolean isValidPhoneNumber(String phoneNumber) {
        return PHONE_PATTERN.matcher(phoneNumber).matches();
    }
}

在上面的代码中,我们使用了一个正则表达式模式来定义手机号的格式,然后使用matcher()方法对输入的手机号进行匹配。如果匹配成功,则返回true,否则返回false

脱敏手机号

在脱敏手机号时,我们通常需要保留手机号的部分信息,如前三位和后四位,并将中间的数字替换为特定字符。以下是一个简单的实现:

public class PhoneNumberUtils {
    // ...

    public static String desensitizePhoneNumber(String phoneNumber) {
        if (phoneNumber.length() != 11) {
            throw new IllegalArgumentException("Invalid phone number");
        }
        
        return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
    }
}

在上述代码中,我们首先检查手机号的长度是否为11位,如果不是,则抛出异常。然后,我们用substring()方法保留手机号的前三位和后四位,用****替换中间的数字,并将结果返回。

保留手机号的部分信息

有时,我们不希望完全脱敏手机号,而是只需要保留手机号的部分信息,如前三位和后四位。以下是一个实现示例:

public class PhoneNumberUtils {
    // ...
    
    public static String preservePhoneNumber(String phoneNumber) {
        if (phoneNumber.length() != 11) {
            throw new IllegalArgumentException("Invalid phone number");
        }
        
        return phoneNumber.substring(0, 3) + "****" + phoneNumber.substring(7);
    }
}

在上述代码中,我们使用了相同的方法来校验手机号的长度,并保留了手机号的前三位和后四位,中间的数字用****替换。

使用示例

下面是一个使用上述工具类的示例:

public class Main {
    public static void main(String[] args) {
        String phoneNumber = "13812345678";
        
        if (PhoneNumberUtils.isValidPhoneNumber(phoneNumber)) {
            System.out.println("Phone number is valid");
            
            String desensitizedPhoneNumber = PhoneNumberUtils.desensitizePhoneNumber(phoneNumber);
            System.out.println("Desensitized phone number: " + desensitizedPhoneNumber);
            
            String preservedPhoneNumber = PhoneNumberUtils.preservePhoneNumber(phoneNumber);
            System.out.println("Preserved phone number: " + preservedPhoneNumber);
        } else {
            System.out.println("Invalid phone number");
        }
    }
}

在上面的代码中,我们首先校验了手机号的格式,如果手机号格式正确,则分别调用了desensitizePhoneNumber()preservePhoneNumber()方法,并打印了结果。

总结

本文介绍了一种基于Java的手机号脱敏工具类,包括校验手机号格式、脱敏手机号和保留手机号部分信息的功能。开发者可以