xuhy
2025-12-29 17a405c90f91357be223596c2a097c8d5b951e37
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package com.ruoyi.web.controller.tool;
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class IDCardValidatorWithEmpty {
    // 定义支持空字符串的身份证号校验的正则表达式
    private static final String ID_CARD_REGEX = "^$|(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$)|(^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[Xx])$)";
    private static final String PHONE_REGEX = "^$|^1[3-9]\\d{9}$";
    private static final Pattern ID_CARD_PATTERN = Pattern.compile(ID_CARD_REGEX);
    private static final Pattern PHONE_PATTERN = Pattern.compile(PHONE_REGEX);
 
    /**
     * 校验身份证号的方法,允许空字符串
     * @param idCard 待校验的身份证号
     * @return 如果身份证号格式正确或者为空字符串返回 true,否则返回 false
     */
    public static boolean isValidIDCard(String idCard) {
        Matcher matcher = ID_CARD_PATTERN.matcher(idCard);
        return matcher.matches();
    }
    public static boolean isValidPhone(String phone) {
        Matcher matcher = PHONE_PATTERN.matcher(phone);
        return matcher.matches();
    }
 
    public static void main(String[] args) {
        // 测试用的 15 位身份证号
        String idCard15 = "110105880620517";
        // 测试用的 18 位身份证号
        String idCard18 = "51370119990231853X";
        // 无效的身份证号
        String invalidIdCard = "123456789012345678";
        // 空字符串
        String emptyIdCard = "";
        String phone = "11212312312";
 
        // 调用校验方法并输出结果
        System.out.println(idCard15 + " 是否为有效的身份证号: " + isValidIDCard(idCard15));
        System.out.println(idCard18 + " 是否为有效的身份证号: " + isValidIDCard(idCard18));
        System.out.println(invalidIdCard + " 是否为有效的身份证号: " + isValidIDCard(invalidIdCard));
        System.out.println("空字符串是否允许: " + isValidIDCard(emptyIdCard));
        System.out.println(phone + "是否为有效的手机号: " + isValidPhone(phone));
    }
}