MRZパーサー・チェックディジット計算ツール

パスポート、身分証明書、ビザの機械読み取りゾーン(MRZ)を貼り付けてください。TD3、TD2、TD1に対応しています。フォーマットを判定して各フィールドを読み出し、ICAO 9303のチェックディジットをすべて再計算して、印字されている値と比較します。処理はすべてブラウザ内で行われ、ページの外には何も送信されません。

機械読み取りゾーンとは

機械読み取りゾーン(MRZ)は、パスポートや身分証明書の下部にある固定幅の数行からなるブロックで、ICAO Doc 9303で標準化されています。書類番号、発行国、氏名、国籍、生年月日、性別、有効期限をそれぞれ決まった位置に記録し、読み取りを検証するためのチェックディジットを備えています。

TD1、TD2、TD3における各フィールドの位置

位置は、ICAO 9303の番号付けと同じく、各行の1から数えます。チェックディジットはどれも保護するフィールドの直後にあり、複合チェックディジットはその行の最後の文字です。

3つのMRZレイアウトにおけるフィールドとチェックディジットの位置
フィールドTD3(パスポート)TD2TD1(身分証明カード)
書類コード1行目、1–21行目、1–21行目、1–2
発行国1行目、3–51行目、3–51行目、3–5
氏名1行目、6–441行目、6–363行目、1–30
書類番号2行目、1–92行目、1–91行目、6–14
そのチェックディジット2行目、102行目、101行目、15
国籍2行目、11–132行目、11–132行目、16–18
生年月日2行目、14–192行目、14–192行目、1–6
そのチェックディジット2行目、202行目、202行目、7
性別2行目、212行目、212行目、8
有効期限2行目、22–272行目、22–272行目、9–14
そのチェックディジット2行目、282行目、282行目、15
個人番号2行目、29–42
そのチェックディジット2行目、43
複合チェックディジット2行目、442行目、362行目、30

チェックディジットの計算方法

  1. チェックディジットが保護するフィールドを取り出します。書類番号、生年月日、有効期限、個人番号、または複合チェックディジットの範囲全体です。
  2. 各文字に値を割り当てます。数字はその数値のまま、英字はアルファベット順の位置に9を足した値(A = 10、Z = 35)、埋め文字<は0です。
  3. 各値に、位置ごとの重みを掛けます。重みは先頭の文字の7から始まり、フィールド全体で7, 3, 1の順に繰り返します。
  4. 積をすべて足し合わせます。
  5. その合計を10で割った余り、つまり合計の一の位がチェックディジットです。

見本のパスポート番号AM7304518(誰のものでもない架空の書類)で計算すると、次のようになります。

見本の書類番号で、7-3-1の重み付けを1文字ずつ計算した例
文字重み
A10770
M22366
7717
33721
0030
4414
55735
1133
8818
合計と、10で割った余り214 → 4

つまり、このゾーンでAM7304518の後ろに印字される桁は4です。上のTD3の例を読み込むと、パーサーが目の前で同じ数字を再計算します。

複合チェックディジット

もう1つの桁が、ゾーンのほぼ全体をまとめて保護します。それが複合チェックディジットです。計算方法は同じで、どの桁にも保護されないフィールドを除いた範囲が対象です。TD1ではこの範囲が2行にまたがり、自作のパーサーがよく間違えるのはこの部分です。各フィールドの桁はすべて合っているのに複合チェックディジットだけが合わないゾーンは、部分ごとには正しく書き写されたものの、組み立てを誤っています。

チェックディジットが保護しないもの

氏名を保護するチェックディジットはなく、発行国を保護するものもありません。どちらかを読み違えても計算は合ったままなので、誤りに気づけません。だからこそ、書類の印字面も読み取って2つの結果を照合すれば、チェックディジットでは見つけられない誤りを検出できます。

よくある質問

MRZとは何ですか?

機械読み取りゾーン(MRZ)は、パスポートや身分証明書の下部にある固定幅の数行からなるブロックで、ICAO Doc 9303で標準化されています。書類番号、発行国、氏名、国籍、生年月日、性別、有効期限をそれぞれ決まった位置に記録し、読み取りを検証するためのチェックディジットを備えています。

このツールはどのフォーマットに対応していますか?

ICAO 9303の3つのレイアウトすべてに対応しています。パスポートの44文字×2行のTD3、36文字×2行のTD2、身分証明書や在留許可証の30文字×3行のTD1です。2つのビザレイアウトMRV-AとMRV-Bも読み取れますが、これらには複合チェックディジットがありません。フォーマットは行数と各行の長さから判定し、そのフォーマットにあるチェックディジットをすべて再計算します。

チェックディジットが合わないのはなぜですか?

ほとんどの場合、そのチェックディジットが保護するフィールドの1文字が、読み違えられたか入力ミスされたことが原因です。0の代わりにO、8の代わりにB、行末で抜け落ちた埋め文字などです。表には、ゾーンに印字されている桁とデータから計算した桁が並び、その桁が対象とするフィールドも示されます。フィールドのチェックディジットは合っているのに複合チェックディジットが合わない場合は、フィールドとフィールドの間の文字を確認してください。複合チェックディジットは、各フィールドのチェックディジット自体も対象に含んでいます。

写真からゾーンを読み取れますか?

いいえ。このページが読み取るのは貼り付けたテキストで、ブラウザの外には何も送信されません。写真からゾーンと印字面を読み取るのは認識APIの役割です。画像を付けてHTTPで1回呼び出すと、同じチェックディジットを検証済みの状態で、各フィールドがJSONで返ってきます。

入力したデータは保存されますか?

いいえ。貼り付けたゾーンは、ご自身のブラウザで動くコードが解析します。何もアップロードされず、ゾーンを含むリクエストも一切送信されません。このページは静的ファイルで、読み込み後に行う唯一のリクエストは、ページ上部に表示するサービスのお知らせがあるかどうかの問い合わせです。この呼び出しには、入力した内容は何も含まれません。認識APIはこれとは別のもので、意図して呼び出す必要があります。

次に読むページ

  • MRZジェネレーター – テスト用データに使う、チェックディジットが正しい有効なゾーンを作成します。
  • TD1・TD2・TD3 – 3つのフォーマットそれぞれの行数と文字数、そして標準のどこで定義されているか。
  • 書類全体を読み取る – 符号化された面に加えて印字面も、1回のリクエストで、アカウントなしで。
  • 国別のパスポートOCR – このAPIが読み取る発行国の一覧。国ごとに見本のゾーンがあります。