中国本土 本地计算 开箱即用 内置示例 不留痕迹

身份证号校验解析工具

输入 18 位或 15 位身份证号,本地验证校验位是否正确,并解析省级与市级归属地、出生日期、性别、顺序码与生肖星座。

录入身份证号时抄错一位、顺序颠倒是最常见的数据错误,校验位就是为抓这类错误设计的:18 位号码的最后一位由前 17 位按国家标准算出,抄错任何一位都对不上。本工具本地验证校验位,并解析归属地(省、市)、出生日期、性别、顺序码与生肖星座,15 位老号码也能处理。

边界要说透:校验位正确只证明「号码结构合法、没有抄错位」,不证明号码真实存在——伪造一个校验位正确的号码在数学上很容易,身份核验必须走官方实名渠道。本工具适合录入校对、数据清洗与教学演示;全部计算在浏览器本地完成,号码不上传,但也请勿把他人证件号粘进任何不信任的网页。

使用步骤

  1. 把 18 位(或 15 位)身份证号粘进输入框。
  2. 看校验位结果:正确 / 错误会明确标注,错误时号码大概率有抄错位。
  3. 核对解析明细:省市归属、出生日期、性别与顺序码是否与预期一致。
  4. 批量清洗数据时逐条验证,X 结尾的号码注意大小写口径。

计算原理与示例

第 18 位校验位怎么算的

18 位身份证号的最后一位是校验位,按国家标准 GB 11643-1999 采用 ISO 7064 MOD 11-2 算法:把前 17 位分别乘上加权因子 7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 后求和,用和除以 11 的余数从映射表 10X98765432 中取出校验码。例如 11010519491231002 的加权和除 11 余 2,对应校验码 X,所以完整号码是 11010519491231002X。校验位不符说明号码中至少有一位抄错。

各段数字分别代表什么

号码各段含义:前 6 位是行政区划码(省 2 位 + 市 2 位 + 县 2 位),第 7~14 位是出生日期 YYYYMMDD,第 15~17 位是顺序码(同一地区同一天出生者的编号,第 17 位奇数为男、偶数为女),第 18 位是校验位。本工具解析到省、市两级,县级码数量约三千且历年有撤并调整,未收录的市级前缀会明确标注「未收录」而不是给出可能过时的结果。

15 位老证如何升成 18 位

15 位老证(一代证)升位规则:在第 6 位行政区划码后插入「19」补足出生世纪,再按上述算法补算第 18 位校验码。例如 110105491231002 升位后为 11010519491231002X。15 位号码不含世纪信息,1900 年代出生者一律按 19xx 处理,这也是 2000 年后必须换发 18 位证的原因之一。

计算依据:GB 11643-1999 公民身份号码标准,校验位采用 ISO 7064:1983 MOD 11-2(加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2,校验码映射 10X98765432);行政区划码依据 GB/T 2260(收录省级 34 项与常用地级市前缀,县级不收录);15 位升位按第 7 位插入 19 后补算校验码。

代码示例

Python GB 11643-1999 校验位算法

WEIGHTS = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
CODES = "10X98765432"

def check_bit(id17):
    s = sum(int(c) * w for c, w in zip(id17, WEIGHTS))
    return CODES[s % 11]

check_bit("11010519491231002")   # "X"
# 完整校验:check_bit(id[:17]) == id[17].upper()

JavaScript 同算法的 JS 写法

const W = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const C = "10X98765432";

const checkBit = (id17) =>
  C[[...id17].reduce((s, c, i) => s + c * W[i], 0) % 11];

checkBit("11010519491231002");   // "X"
// 与本工具同口径(ISO 7064 MOD 11-2)

常见问题

校验位对了就说明是真实存在的身份证号吗?

不。校验位只能证明「号码结构合法、没有抄错位」,不能证明该号码已实际签发。伪造一个校验位正确的号码在数学上很容易,本工具用于录入校对、格式核验和数据清洗,不能用于身份核验或实名认证场景。

为什么我查到的市级归属地显示「未收录」?

行政区划码历年有撤并调整(如巢湖 2011 年撤销、莱芜 2019 年并入济南),县级码约三千个且变动频繁。本工具只收录可核实的省市两级前缀,宁可标注未收录也不给可能过时的归属地,这是刻意的取舍。

第 17 位数字怎么判断性别?

顺序码(第 15~17 位)是同一地区同一天出生者的编号,其中第 17 位奇数分配给男性、偶数分配给女性。例如第 17 位是 5 则为男,是 2 则为女。工具会在解析表里同时给出第 17 位的值方便核对。

15 位老证还能用吗?

一代证已于 2013 年 1 月 1 日停用,日常场景必须使用 18 位二代证。但很多老系统数据库里仍是 15 位号码,本工具的升位功能可以把 15 位老号码换算成对应的 18 位形式,用于数据迁移和比对。

为什么有的号码以 X 结尾?

X 是罗马数字 10。校验码映射表为 10X98765432,当加权和除以 11 余 2 时校验码是 10,两位数放不下,就用罗马数字 X 表示。所以 X 结尾完全正常,输入时大小写均可,工具会自动转为大写。

把身份证号输进来安全吗?

本页所有计算都在你的浏览器本地完成:校验位验算、地区码查表、生日性别解析不经过任何服务器,页面也没有上传逻辑。查询历史只存在本机 localStorage,可一键清空;处理他人证件信息时仍请注意合规,用完即清。

能查某个身份证号的主人是谁吗?

不能,也不应该。本工具只做格式校验和号码自身携带信息的解析(地区、生日、性别),不联网、不查任何数据库。个人身份信息受法律保护,任何「查开房」「查身份」类服务都涉嫌违法。

延伸阅读

来自本站原创文章,讲清这个工具背后的算法与口径。