温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java正则怎么匹配身份证

发布时间:2026-07-24 07:37:10 来源:亿速云 阅读:126 作者:小樊 栏目:编程语言

在 Java 中匹配中国居民身份证号,通常分两种情况:


一、18 位身份证(最常见 ✅)

规则简述

  • 18 位
  • 前 17 位:数字
  • 最后一位:数字 或 X(大小写均可)

正则表达式

^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$

Java 示例

import java.util.regex.Pattern;

public class IdCardTest {
    public static void main(String[] args) {
        String regex = "^[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$";

        String id = "11010519491231002X";

        boolean match = Pattern.matches(regex, id);
        System.out.println(match); // true
    }
}

二、15 位身份证(老身份证 ⚠️)

规则简述

  • 15 位
  • 全数字
  • 年份只有两位(如 90 表示 1990)

正则表达式

^[1-9]\d{5}\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}$

三、同时支持 15 位和 18 位(常用)

String regex =
    "^[1-9]\\d{5}" +
    "(" +
        "\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}" + // 15位
        "|" +
        "(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]" + // 18位
    ")$";

四、仅校验格式 ≠ 校验合法性 ⚠️

⚠️ 正则只能校验格式,不能校验:

  • 出生日期是否真实
  • 地区码是否真实
  • 校验位是否正确(18 位最后一位)

如果需要严格校验(推荐)

  • 使用 身份证校验算法(加权求和)
  • 或使用第三方库,如:
    • Hutool:IdcardUtil
    • 自己实现校验位计算

五、Hutool 示例(强推荐 ✅)

import cn.hutool.core.lang.idcard.IdcardUtil;

public class Test {
    public static void main(String[] args) {
        System.out.println(IdcardUtil.isValidCard("11010519491231002X"));
    }
}

如果你需要:

  • ✅ 只校验格式
  • ✅ 校验出生日期
  • ✅ 校验校验位
  • ✅ 区分 15 / 18 位

可以告诉我,我可以给你完整工具类代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手