首页/开发/正则与编码速查/身份证号校验正则与校验位
正则进阶45 条

身份证号校验正则与校验位

18 位身份证号由地址码、出生日期、顺序码与校验位组成,正则只能校验形状(含月份与日期的粗范围),日期真实性与末位校验位必须用代码计算,校验位按模 11 减 2 的加权算法得出。校验位自洽不代表号码真实存在。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​​​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌‌​‌​‌​‌‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

身份证号校验正则与校验位

现行的 18 位号码分为四段:6 位地址码、8 位出生日期、3 位顺序码、1 位校验位(0 到 9 或字母 X)。正则可以校验长度与各段的形状,日期是否真实存在以及末位校验位是否正确都要用代码算。只判断位数与格式的校验,对随机编造的号码几乎不起作用。

基本信息

18 位结构6 位地址码 + 8 位出生日期 + 3 位顺序码 + 1 位校验位
15 位老格式6 位地址码 + 6 位出生日期 + 3 位顺序码,没有校验位
校验算法ISO 7064 的模 11 减 2 方案:各位乘以加权因子求和,对 11 取余后按映射表得到校验位
顺序码第 17 位为奇数表示男性、偶数表示女性,这是编码约定而非校验规则,历史数据存在不一致

典型使用场景

  • 实名信息录入:提交前先做形状与校验位检查,减少明显编造的输入
  • 数据清洗:从历史表里筛出格式异常的记录,供人工核对
  • 批量导入前预检:把可疑数据集中列出,避免整批失败
  • 文本抽取:从合同、报表等文本中定位候选号码,再逐个校验
  • 数据脱敏处理:识别字段位置后做掩码,注意不要在校验日志里记录完整号码

形状校验与校验位计算

形状校验与校验位计算
# 形状校验:地址码六位、出生年份四位、月份两位、日期两位、顺序码三位、末位数字或 X
^\d{6}(?:19|20)\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}[\dXx]$
# 校验位计算:加权因子按位次固定,取余后查映射表
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check = '10X98765432'                      # 余数 0 到 10 依次对应的校验位
s = sum(int(c) * w for c, w in zip(num[:17], weights)) % 11
if num[17].upper() != check[s]: reject()   # 末位统一转大写再比较

各段校验方式

组成位数校验手段
地址码6正则限形状,是否有效需查行政区划码表
出生日期8正则限月份与日期范围,大小月与闰年需代码判断
顺序码3正则限数字,奇偶约定仅作参考
校验位1按加权取余算法计算后比较,接受大写与小写 X
正则里的日期分支只能限制到月份 1 到 12、日期 1 到 31,形如 2 月 30 日或 4 月 31 日仍会通过;要严格判定必须用日期库构造一次日期对象,这也是正则与代码分工的典型例子。
身份证号属于敏感个人信息:采集要符合最小必要原则,存储需加密或使用专用字段类型,日志与报错信息中不得出现完整号码,排障时以掩码形式记录。

易错点

  • 只用位数规则:任何 18 位数字都能通过,校验形同虚设,批量灌入的假数据无法在入口被发现
  • 不兼容末位小写 X:用户输入小写时被判非法,应先统一为大写再比较
  • 把顺序码奇偶当作性别硬校验:历史数据与特殊情形存在不一致,硬校验会误拒真实用户
  • 认为校验位正确就代表号码真实存在:算法只能验证自洽性,无法证明该号码对应真实人员
  • 在日志里打印完整号码:违反最小必要与脱敏要求,属于高风险合规问题

数据来源与参考

  • GB 11643:公民身份号码国家标准
  • ISO 7064:校验字符系统(模 11 减 2 方案)
  • GB/T 2260:中华人民共和国行政区划代码

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/idcard-number-validate.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​‌‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​​‌​​​​‌​‌‌​‌​‌‌​‌‌‌​​‌‌‌​‌​‌​‌‌​‌‌​‌​‌‌​​​‌​​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​​​‌​‌‌​‌‌​​​‌‌​‌​​‌​‌‌​​‌​​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​