MRZ 生成器

生成一段有效的护照机读区(ICAO 9303 TD3),校验位全部正确。可用它来制作测试数据:生成结果是合成的,绝不能包含真实的个人数据。

生成的 MRZ

P<GRCPARADEIGMA<<ELENI<SOFIA<<<<<<<<<<<<<<<<
AM73045184GRC9403084F3203101PN48291630<<<<72

什么是机读区

机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。

上方的校验位是如何计算的

  1. 取该校验位所保护的字段:证件号码、出生日期、有效期、个人号码,或整个综合校验范围。
  2. 给每个字符赋值:数字取其本身的值,字母取其在字母表中的位置加九(A = 10,Z = 35),填充符 < 记为零。
  3. 将每个值乘以其位置对应的权重。权重在整个字段中按 7, 3, 1 循环,第一个字符从 7 开始。
  4. 把所有乘积相加。
  5. 校验位就是该总和对 10 取模的结果,也就是总和的个位数。

以样例护照号码 AM7304518 为例逐步计算。这是一份虚构的证件,不属于任何人:

在一个样例证件号码上逐个字符演示 7-3-1 加权计算
字符数值权重乘积
A10770
M22366
7717
33721
0030
4414
55735
1133
8818
求和,再对 10 取模214 → 4

在上方把 AM7304518 填为证件号码,生成的机读区中紧随其后的校验位就是 4:同样的算术,由同一段代码执行。

综合校验位

还有一个校验位同时覆盖机读区的大部分内容:综合校验位。它的算法相同,但计算范围会跳过没有校验位保护的字段;在 TD1 中,这个范围横跨两行,而手写的解析器通常正是在这里出错。如果一个机读区的各字段校验位全部通过而综合校验位失败,说明各部分都转录正确,但拼接错了。

校验位覆盖不到的内容

没有任何校验位覆盖姓名,也没有任何校验位覆盖签发国。这两处读错都不会被发现:算术依然成立。正因如此,同时读取证件的印刷面并比对两次读取结果,才能发现校验位发现不了的错误。

常见问题

MRZ 是什么?

机读区(MRZ)是护照或身份证底部由若干固定宽度的行组成的区块,由 ICAO Doc 9303 标准化。它在固定位置编码了证件号码、签发国、姓名、国籍、出生日期、性别和有效期,并附有用于验证读取结果的校验位。

这个工具支持哪些格式?

本生成器生成 TD3,即护照上两行、每行 44 个字符的机读区,每个校验位(包括综合校验位)都根据您输入的值计算。格式说明页还介绍了 TD1 和 TD2,并各附一个完整的计算示例。

你们会保存我的数据吗?

不会。机读区由在您自己浏览器中运行的代码生成,从不离开本页面:不上传任何内容,也不会发出任何携带您所填数值的请求。本页面是一个静态文件,加载后唯一发出的请求是询问是否有需要在顶部显示的服务通知。尽管如此,仍请使用虚构的数值:生成的机读区用于测试数据,真实的个人数据不应出现在其中。

接下来去哪里

  • MRZ 解析器 – 粘贴一段机读区,看着每个校验位被重新计算。
  • TD1、TD2 和 TD3 – 三种格式各有几行、每行多少个字符,以及标准在哪里定义了它们。
  • 读取整份证件 – 除编码区外还读取印刷面,一次请求即可完成,无需账户。
  • 按国家分类的护照 OCR – 本 API 可读取的签发国,每个国家都附有自己的样例机读区。