MRZ 解析器与校验位计算器
粘贴护照、身份证或签证的机读区(MRZ):TD3、TD2 或 TD1。工具会自动识别格式,读出每个字段,并重新计算每个 ICAO 9303 校验位,与印在证件上的校验位进行比对。全部过程都在您的浏览器中运行,任何内容都不会离开本页面。
什么是机读区
机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。
各字段在 TD1、TD2 和 TD3 中的位置
位置在每一行中都从 1 开始计数,与 ICAO 9303 的编号方式一致。每个校验位紧跟在它所保护的字段之后;综合校验位是其所在行的最后一个字符。
| 字段 | TD3(护照) | TD2 | TD1(身份证) |
|---|---|---|---|
| 证件代码 | 第 1 行,1–2 | 第 1 行,1–2 | 第 1 行,1–2 |
| 签发国 | 第 1 行,3–5 | 第 1 行,3–5 | 第 1 行,3–5 |
| 姓名 | 第 1 行,6–44 | 第 1 行,6–36 | 第 3 行,1–30 |
| 证件号码 | 第 2 行,1–9 | 第 2 行,1–9 | 第 1 行,6–14 |
| 其校验位 | 第 2 行,10 | 第 2 行,10 | 第 1 行,15 |
| 国籍 | 第 2 行,11–13 | 第 2 行,11–13 | 第 2 行,16–18 |
| 出生日期 | 第 2 行,14–19 | 第 2 行,14–19 | 第 2 行,1–6 |
| 其校验位 | 第 2 行,20 | 第 2 行,20 | 第 2 行,7 |
| 性别 | 第 2 行,21 | 第 2 行,21 | 第 2 行,8 |
| 有效期至 | 第 2 行,22–27 | 第 2 行,22–27 | 第 2 行,9–14 |
| 其校验位 | 第 2 行,28 | 第 2 行,28 | 第 2 行,15 |
| 个人号码 | 第 2 行,29–42 | – | – |
| 其校验位 | 第 2 行,43 | – | – |
| 综合校验位 | 第 2 行,44 | 第 2 行,36 | 第 2 行,30 |
校验位是如何计算的
- 取该校验位所保护的字段:证件号码、出生日期、有效期、个人号码,或整个综合校验范围。
- 给每个字符赋值:数字取其本身的值,字母取其在字母表中的位置加九(A = 10,Z = 35),填充符 < 记为零。
- 将每个值乘以其位置对应的权重。权重在整个字段中按 7, 3, 1 循环,第一个字符从 7 开始。
- 把所有乘积相加。
- 校验位就是该总和对 10 取模的结果,也就是总和的个位数。
以样例护照号码 AM7304518 为例逐步计算。这是一份虚构的证件,不属于任何人:
| 字符 | 数值 | 权重 | 乘积 |
|---|---|---|---|
| A | 10 | 7 | 70 |
| M | 22 | 3 | 66 |
| 7 | 7 | 1 | 7 |
| 3 | 3 | 7 | 21 |
| 0 | 0 | 3 | 0 |
| 4 | 4 | 1 | 4 |
| 5 | 5 | 7 | 35 |
| 1 | 1 | 3 | 3 |
| 8 | 8 | 1 | 8 |
| 求和,再对 10 取模 | 214 → 4 | ||
所以在该机读区中,AM7304518 之后印的校验位是 4。载入上方的 TD3 示例,解析器就会在您眼前重新算出同一个数字。
综合校验位
还有一个校验位同时覆盖机读区的大部分内容:综合校验位。它的算法相同,但计算范围会跳过没有校验位保护的字段;在 TD1 中,这个范围横跨两行,而手写的解析器通常正是在这里出错。如果一个机读区的各字段校验位全部通过而综合校验位失败,说明各部分都转录正确,但拼接错了。
校验位覆盖不到的内容
没有任何校验位覆盖姓名,也没有任何校验位覆盖签发国。这两处读错都不会被发现:算术依然成立。正因如此,同时读取证件的印刷面并比对两次读取结果,才能发现校验位发现不了的错误。
常见问题
MRZ 是什么?
机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。
这个工具支持哪些格式?
支持 ICAO 9303 的全部三种格式:TD3,即护照上的两行、每行 44 个字符;TD2,两行、每行 36 个字符;TD1,即身份证或居留许可上的三行、每行 30 个字符。它还能读取两种签证格式 MRV-A 和 MRV-B,这两种格式没有综合校验位。格式根据行数和每行长度自动识别,该格式包含的每个校验位都会重新计算。
校验位为什么会不通过?
几乎总是因为它所保护的字段中有一个字符被读错或输错:把 O 当成 0,把 B 当成 8,或者行尾丢了一个填充符。表格会把机读区印出的校验位与根据数据算出的校验位并排显示,并列出该校验位覆盖的字段。如果字段校验位通过而综合校验位不通过,请检查字段之间的字符:综合校验位也覆盖各字段校验位本身。
能从照片中读取机读区吗?
不能。本页面只读取您粘贴的文本,任何内容都不会离开您的浏览器。从照片中读取机读区和印刷页,是识别 API 的工作:带上图像发起一次 HTTP 调用,字段就会以 JSON 返回,同样的校验位已经验证完毕。
你们会保存我的数据吗?
不会。您粘贴的机读区由在您自己浏览器中运行的代码解析:不上传任何内容,也不会发出任何携带它的请求。本页面是一个静态文件,加载后唯一发出的请求是询问是否有需要在顶部显示的服务通知,这个请求不携带您输入的任何内容。识别 API 是另一回事,需要您主动调用。
接下来去哪里
- MRZ 生成器 – 为测试数据生成校验位正确的有效机读区。
- TD1、TD2 和 TD3 – 三种格式各有几行、每行多少个字符,以及标准在哪里定义了它们。
- 读取整份证件 – 除编码区外还读取印刷面,一次请求即可完成,无需账户。
- 按国家分类的护照 OCR – 本 API 可读取的签发国,每个国家都附有自己的样例机读区。