MRZ 生成器
生成一段有效的护照机读区(ICAO 9303 TD3),校验位全部正确。可用它来制作测试数据:生成结果是合成的,绝不能包含真实的个人数据。
生成的 MRZ
P<GRCPARADEIGMA<<ELENI<SOFIA<<<<<<<<<<<<<<<<
AM73045184GRC9403084F3203101PN48291630<<<<72 用 MRZ 解析器验证一下。
什么是机读区
机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。
上方的校验位是如何计算的
- 取该校验位所保护的字段:证件号码、出生日期、有效期、个人号码,或整个综合校验范围。
- 给每个字符赋值:数字取其本身的值,字母取其在字母表中的位置加九(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:同样的算术,由同一段代码执行。
综合校验位
还有一个校验位同时覆盖机读区的大部分内容:综合校验位。它的算法相同,但计算范围会跳过没有校验位保护的字段;在 TD1 中,这个范围横跨两行,而手写的解析器通常正是在这里出错。如果一个机读区的各字段校验位全部通过而综合校验位失败,说明各部分都转录正确,但拼接错了。
校验位覆盖不到的内容
没有任何校验位覆盖姓名,也没有任何校验位覆盖签发国。这两处读错都不会被发现:算术依然成立。正因如此,同时读取证件的印刷面并比对两次读取结果,才能发现校验位发现不了的错误。
常见问题
MRZ 是什么?
机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。
这个工具支持哪些格式?
本生成器生成 TD3,即护照上两行、每行 44 个字符的机读区,每个校验位(包括综合校验位)都根据您输入的值计算。格式说明页还介绍了 TD1 和 TD2,并各附一个完整的计算示例。
你们会保存我的数据吗?
不会。机读区由在您自己浏览器中运行的代码生成,从不离开本页面:不上传任何内容,也不会发出任何携带您所填数值的请求。本页面是一个静态文件,加载后唯一发出的请求是询问是否有需要在顶部显示的服务通知。尽管如此,仍请使用虚构的数值:生成的机读区用于测试数据,真实的个人数据不应出现在其中。
接下来去哪里
- MRZ 解析器 – 粘贴一段机读区,看着每个校验位被重新计算。
- TD1、TD2 和 TD3 – 三种格式各有几行、每行多少个字符,以及标准在哪里定义了它们。
- 读取整份证件 – 除编码区外还读取印刷面,一次请求即可完成,无需账户。
- 按国家分类的护照 OCR – 本 API 可读取的签发国,每个国家都附有自己的样例机读区。