身份证号能看出什么?籍贯、生日、性别与校验位详解
身份证号不是随机数字串:前 6 位是行政区划、中间 8 位是出生日期、第 17 位决定性别、最后一位是加权算出来的校验码。读懂这四段,就能判断一个号码是不是抄错了,也能知道它其实给不出哪些信息。
- 18 位身份证号分四段:前 6 位行政区划、第 7 至 14 位出生日期、第 15 至 17 位顺序码、末位校验码
- 校验码由前 17 位加权求和后对 11 取余得到,余数为 2 时校验码是 X,所以末位 X 完全合法
- 第 17 位是性别位,奇数为男、偶数为女;15 位号码的性别位在第 15 位
- 校验通过只说明号码前后自洽,不能证明这个号码真实存在或属于本人
- 地址码对应签发的行政区划,不等于持证人现在的居住地,部分历史代码已撤销或合并
- 身份证号属于个人敏感信息,不应粘贴到公开场合,也不应写进日志与埋点
#18 位号码由四段拼成
身份证号的每一位都有固定含义,18 位号码可以拆成地址码、出生日期码、顺序码和校验码四段。 拆开看是这样的:
| 位次 | 长度 | 含义 |
|---|---|---|
| 第 1 至 6 位 | 6 位 | 地址码,签发的县级行政区划代码 |
| 第 7 至 14 位 | 8 位 | 出生日期,格式为年年年年月月日日 |
| 第 15 至 17 位 | 3 位 | 顺序码,同地区同日期出生者的流水号 |
| 第 18 位 | 1 位 | 校验码,由前 17 位算出来的 0 至 9 或 X |
用 身份证信息查询 粘贴一个号码,它会把出生日期、性别、年龄、星座、生肖和地区一次性解析出来,并在本地完成校验。
其中有两个位置值得单独记住:
- 第 17 位决定性别,奇数分配给男性、偶数分配给女性
- 第 7 至 14 位是出生日期,所以星座与生肖都能直接推导,不需要额外输入
地址码是签发时的行政区划代码,不是持证人的现居住地。行政区划会撤县设区、合并或更名,早期号码里出现的旧代码在现行区划表里可能已经查不到,这时解析结果会指向代码对应的历史地区。
#校验位是怎么算出来的
校验码的算法只有两步:前 17 位分别乘以固定权重后求和,再把总和对 11 取余,用余数查表得到末位。 这套规则来自 GB 11643,是 18 位号码能自校验的基础。
每一位的权重是固定的,从第 1 位到第 17 位依次为:
| 位序 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 权重 | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
求和结果除以 11 得到余数,余数与校验码一一对应:
| 余数 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
#完整算一遍
以号码 11010519491231002X 为例,前 17 位与权重逐位相乘:
号码 1 1 0 1 0 5 1 9 4 9 1 2 3 1 0 0 2
权重 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
乘积 7 9 0 5 0 20 2 9 24 27 7 18 30 5 0 0 4
总和 = 167
167 ÷ 11 = 15 余 2,余数 2 对应校验码 X所以这个号码的末位是 X。反过来说,如果末位不是 X 而是别的字符,前 17 位相同的情况下校验就不通过 —— 最常见的原因就是手抄时改了一位数字却没重算末位。
想手工验证时不用逐位算乘法:先用前 17 位算出总和,只记住「余数 2 对应 X」这一个特殊项即可。余数是 10 时校验码为 2,余数是 1 时校验码为 0,这两个也容易被记反。
#15 位号码怎么升成 18 位
15 位号码升 18 位只做两件事:在第 7 位前补上「19」,再按前 17 位重算校验码补在末位。
用同一个例子走一遍:
15 位: 110105 491231002
地址码 出生日期(两位年)+顺序码
升位: 110105 19 491231002
18 位: 11010519491231002 + 校验码 X
结果: 11010519491231002X两者的差别集中在三处,混淆时容易算错:
| 对比项 | 15 位 | 18 位 |
|---|---|---|
| 出生日期 | 6 位,年份只保留后两位 | 8 位,含完整四位年份 |
| 校验位 | 没有 | 末位,0 至 9 或 X |
| 性别位 | 第 15 位 | 第 17 位 |
15 位号码在 1999 年 10 月起停止签发,一代身份证自 2013 年 1 月 1 日起停止使用,但不少老系统里仍按 15 位存放历史数据,身份证信息查询 两种位数都能解析。
升位规则统一按 19 补世纪,所以 15 位号码只能还原出 19xx 年的出生日期。如果一份数据里混有 2000 年后出生的人,他们的号码不可能是 15 位格式,遇到这种记录应视为脏数据而不是待升位的号码。
#解析结果能证明什么、不能证明什么
校验通过只说明号码在格式上自洽,即前 17 位与末位是配套的,它能排除「抄错一位」这类错误,但不能证明号码真实存在。
具体边界可以这样区分:
- 能证明:出生日期、性别、地址码对应的行政区划,这些由编码规则直接决定
- 不能证明:号码是否真实签发、是否属于当前填写者、持有人现在住在哪里
- 会变的部分:年龄与星座随当前日期变化,用工具查询时按当天日期计算
需要批量核对时,先用 正则表达式测试 把候选号码按 18 位格式筛出来,再逐个校验,比整份表格肉眼扫一遍可靠得多。
#处理身份证号的隐私边界
身份证号是个人敏感信息,无论用哪个工具处理,都不应该出现在公开场合、日志和埋点里。
落到日常操作上,有几条底线:
- 不要粘贴到公开的聊天群、工单系统、在线协作表格或截图里
- 不要写进应用日志、错误堆栈、监控上报字段
- 展示时脱敏,常见做法是只保留前 3 位与后 4 位,其余用星号替换
- 测试环境一律使用虚构号码,不要拿真实数据当测试样本
- 收集前先问「是否真的必要」,能只存校验结果就不要存原号码
批量脱敏可以先用 正则表达式测试 一次匹配 18 位数字串,再用 查找替换 按规则替换成掩码。这一步要在数据入库或外发之前完成,事后再补等于已经泄露过一次。
从 PDF 或扫描件复制号码时还有一种情况:数字可能是全角字符,看起来一样但校验不通过,用 全角半角转换 转成半角再解析即可。
本文提到的解析全部在浏览器本地完成,号码不会上传到服务器。但这只解决「传输环节」的问题:把敏感号码交给任何在线服务之前,都应该先确认它是否真的需要拿到原文,能本地离线处理的就不要联网。
#常见问题
#末位校验码是 X,是正常的吗?
正常。校验码的取值是 0 至 9 或 X 共 11 种,X 代表余数为 2 的情况,属于标准定义的一部分,不是占位符也不是错误。录入系统时注意大小写:规范里用大写 X,部分老系统只接受小写 x,遇到校验不过可以先确认这一点。
#15 位身份证号现在还能用吗?
作为证件已经失效:15 位号码在 1999 年 10 月起停止签发,一代身份证自 2013 年 1 月 1 日起停止使用。但老系统里常留存 15 位格式的历史数据,需要解析这类数据时,可以直接输入 15 位号码,工具会按同样规则解析出生日期、性别与地区。
#为什么查出来的地区和身份证上的地址不一样?
因为地址码记录的是签发时的户籍所在地,与现在的居住地、实际办证地都可能不同。另外行政区划本身会调整,撤县设区、区划合并之后,同一个代码对应的名称也会变化,早期号码里的代码在现行区划表里可能已经不存在。
#校验通过就说明这个号码是真的吗?
不能。校验位只保证前 17 位与末位在数学上配套,任何人都可以按规则构造出一个校验通过但不对应任何真人的号码。校验的作用是把「抄错一位」「录入时漏字符」这类问题挡在前面,身份真伪要靠权威渠道核验。
#用在线工具查身份证号安全吗?
取决于工具在哪一端计算。在浏览器本地解析、不发请求的工具,号码只停留在你的设备上;而需要把号码提交给服务器的工具,等于把敏感信息交给第三方,风险高得多。使用前可以打开浏览器开发者工具的网络面板,确认没有相关请求发出。
#批量整理一份含身份证号的表格时,第一步该做什么?
第一步是先脱敏,不是先校验。用正则批量匹配 18 位数字串,把中间部分替换成掩码,确认外发或入库的副本里已经没有完整号码,再对副本做格式校验与去重。顺序反了,完整号码就已经流经了工具与日志。