返回

正则表达式教程:身份证号识别

正则表达式

一、正则解释

^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$
  • ^\d{6}:匹配身份证号的前 6 位数字(地区代码)。
  • ((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3}:匹配 15 位身份证号的中间部分。
  • |:分隔不同的匹配模式。
  • ((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}):匹配 18 位身份证号的中间部分。
  • (\d|X|x)$:匹配身份证号的最后一位数字或字母 X。

二、使用场景

此正则表达式可用于验证身份证号的有效性。它支持 15 位和 18 位身份证号,并符合中国国家标准(GB 11643-1999)。

三、代码示例

JavaScript

const regex = /^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/;

const idNumber = '622223199912051311';
const result = regex.test(idNumber);

console.log(result); // true

Java

import java.util.regex.Pattern;

public class IdNumberValidation {

    public static void main(String[] args) {
        String regex = "^\\d{6}((((((19|20)\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(((19|20)\\d{2})(0[13578]|1[02])31)|((19|20)\\d{2})02(0[1-9]|1\\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\\d{3})|(((\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(\\d{2})(0[13578]|1[02])31)|(\\d{2})02(0[1-9]|1\\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\\d{2}))((\\d|X|x)
import java.util.regex.Pattern;

public class IdNumberValidation {

    public static void main(String[] args) {
        String regex = "^\\d{6}((((((19|20)\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(((19|20)\\d{2})(0[13578]|1[02])31)|((19|20)\\d{2})02(0[1-9]|1\\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\\d{3})|(((\\d{2})(0[13-9]|1[012])(0[1-9]|[12]\\d|30))|(\\d{2})(0[13578]|1[02])31)|(\\d{2})02(0[1-9]|1\\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\\d{2}))((\\d|X|x)$";
        Pattern pattern = Pattern.compile(regex);

        String idNumber = "622223199912051311";
        boolean result = pattern.matcher(idNumber).matches();

        System.out.println(result); // true
    }
}
quot;
; Pattern pattern = Pattern.compile(regex); String idNumber = "622223199912051311"; boolean result = pattern.matcher(idNumber).matches(); System.out.println(result); // true } }

PHP

<?php

$regex = '/^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|((\d{2})(0[13578]|1[02])31)|((\d{2})02(0[1-9]|1\d|2[0-8]))|(([13579][26]|[2468][048]|0[048])0229))\d{2}))(\d|X|x)$/';

$idNumber = '622223199912051311';
$result = preg_match($regex, $idNumber);

var_dump($result); // int(1)

Python

import re

regex = r"^\d{6}((((((19|20)\d{2})(0[13-9]|1[012])(0[1-9]|[12]\d|30))|(((19|20)\d{2})(0[13578]|1[02])31)|((19|20)\d{2})02(0[1-9]|1\d|2[0-8])|((((19|20)([13579][26]|[2468][048]|0[48]))|(2000))0229))\d{3})|((((\d{2})(0[1