← 退出

身份证校验

校验号码合法性,提取出生日期性别

所有计算完全在浏览器本地完成,不会上传身份证号码到任何服务器。地区信息只解析到省级,不解析市/区县,避免因为行政区划数据不完整或者过时给出错误信息。这个工具只是格式和校验码的合规性检查,不能验证这个号码是否真实存在、是否对应一个真实的人。

关于身份证校验

这个工具检查一个 18 位中国大陆居民身份证号码在格式和校验码上是否自洽,并在通过后读出号码里编码的三项信息:省级地区、出生日期和性别。它依据的是 GB 11643 的校验码算法:把前 17 位分别乘以固定权重后求和,再对 11 取余,查表得到应有的第 18 位,与号码实际的最后一位比较。必须强调它的边界:它只能说明号码「算得对」,不能证明这个号码真实存在、已经被签发,或者属于某个真实的人;它也不支持 15 位的旧版号码,不查询市县级地区,不能用来核实任何人的身份。

操作步骤

  1. 在「身份证号码(18位)」输入框里输入或粘贴 18 位号码。输入框限制最多 18 个字符,最后一位如果是 X,大小写均可。
  2. 输入内容后,下方立即出现「校验结果」,没有单独的提交按钮;输入框为空时不显示结果。
  3. 如果校验通过,会显示四项:「校验码 · 通过 ✓」、「省级地区」、「出生日期」(格式 年-月-日)和「性别」(男或女)。
  4. 如果不通过,会显示红色提示,说明是长度或格式不对,还是校验码不匹配。校验码不匹配时,提示会告诉你根据前 17 位算出的正确校验码应该是什么。

一个实际例子

下面的号码是为演示而人为构造的,不对应任何真实的人。号码 110101199003071233:前 17 位 11010119900307123 算出的校验码是 3,与最后一位一致,所以通过;前两位 11 对应北京,出生日期显示 1990-03-07,第 17 位是 3(奇数),性别显示男。号码 440306198512310049:校验码应为 9,通过;前两位 44 对应广东,出生日期 1985-12-31,第 17 位是 4(偶数),性别显示女。如果把第一个号码的最后一位改成 4,即 110101199003071234,则提示校验码不匹配,正确的校验码应该是 3,但最后一位是 4。以上结果都是用页面同样的算法实际运行得到的。

号码里各段分别代表什么

18 位号码从左到右依次是:前 6 位地址码(前两位是省级行政区划代码),接着 8 位出生日期码(4 位年、2 位月、2 位日),然后 3 位顺序码(其中第 17 位的奇偶表示性别,奇数为男、偶数为女),最后 1 位是校验码,可能是数字 0 到 9,也可能是罗马数字 X(代表 10)。这个工具只解析前两位的省份、出生日期和第 17 位,不解析第 3 到第 6 位。

支持范围与已知限制

  • 只接受 18 位:前 17 位必须是数字,最后一位是数字或 X(小写 x 会被转成大写)。首尾空格会被去掉,但输入框最多容纳 18 个字符。
  • 15 位旧身份证号不支持,会被当作长度或格式错误。
  • 校验顺序是先看格式,再看校验码,通过之后才解析省份和日期。所以校验码对不上的号码不会显示省份和出生日期。
  • 省级地区只用前两位对照国家标准的省级区划代码表,包含 31 个省、自治区、直辖市以及台湾、香港、澳门。前两位不在表里时,校验码仍然通过,但省级地区会显示为未知。
  • 出生日期只做非常粗略的范围检查:月份必须在 1 到 12,日期在 1 到 31。不检查每个月实际有几天,也不检查闰年、年份是否合理或者是否晚于今天。比如 2 月 30 日对应的号码,只要校验码正确,仍会显示为通过且没有任何警告(例如 110101199002301236)。月份或日期超出范围时,日期后面会附注「(日期范围异常)」,但校验码一栏仍显示通过。
  • 校验码通过只代表号码内部一致。随机编出的号码有大约十一分之一的概率碰巧通过,因此通过不能说明号码是真实的。
  • 性别按第 17 位奇偶判断,不会核对任何证件信息。

常见问题:校验通过是不是说明这个身份证是真的?

不是。校验码算法是公开的,谁都可以按规则构造出一个形式上正确的号码。只有公安机关的身份核验系统才能确认号码是否真实、是否与姓名对应。这个工具适合用在发现输入错误的场景,比如核对自己录入表单的号码有没有少打、多打或错位一位,或者开发时造测试数据。

常见问题:为什么提示「校验码不匹配」,但我确定号码是对的?

先检查是否录入错误,尤其是相邻数字调换、0 与 O 混淆、1 与 l 混淆,或者最后一位的 X 被输入成了别的字符。如果你的号码来自很早以前或者特殊情况办理的证件,理论上也可能出现不符合通用算法的情况,这种情况请以公安机关和证件本身为准。工具给出的「应该是 X」可以帮你判断是不是只有最后一位错了。

常见问题:为什么出生日期旁边提示「日期范围异常」?

说明月份不在 1 到 12 之间,或者日期不在 1 到 31 之间。这类号码即使校验码恰好匹配,也不是正常号码。不过反过来,不显示这条提示也不代表日期一定真实存在,因为工具并不检查每月天数。

常见问题:能查出身份证是哪个市、哪个区的吗?

不能。号码的第 3 到第 6 位确实包含市县信息,但行政区划会调整,而且代码表很庞大。工具选择只解析到省级,避免因为数据不全或过时而给出错误结果。

隐私与处理方式

校验全部在你的浏览器本地完成,页面中的代码只对输入的字符串做算术运算和查表,没有把号码发送到任何服务器,也不保存。刷新页面输入会被清空。身份证号属于敏感个人信息,即使工具不上传,也建议不要在公共电脑上输入真实号码,用完后关闭页面。