各国の郵便番号の書式は、桁数も使える文字も国ごとにばらばらで、世界共通の決まりはありません。それなのに「郵便番号は五桁の数字」という前提で作られたフォームが今も多く残っています。この記事では、書式の分類、郵便番号を使わない国、そして前導ゼロが消える典型的な事故までを順にたどります。
郵便番号の書式はいくつに分けられる?
おおまかに分けると四つの型があります。桁数や文字種を一つの表にまとめると次のようになりますが、これは目安であって、同じ国のなかでも改定されることがあります。
| 型 | 使われる文字 | 特徴 |
|---|---|---|
| 固定長の数字 | 数字のみ | 桁数が決まっており、前導ゼロを含む国がある |
| 可変長の数字 | 数字のみ | 桁数が利用者ごとに変わる |
| 英数字混在 | 英字と数字 | 位置ごとに英字と数字の役割が決まっている |
| 区域コードと配達点の組 | 英数字と空白 | 前半で地域を、後半で配達区域を表す |
英語圏のなかでも方式は違います。カナダ、イギリス、オランダ、アイルランドは英数字混在型に含まれ、それぞれ並び順の決まりを持っています。一方でアメリカの五桁の数字という方式は、あくまで一つの国の方式でしかありません。
郵便番号を使わない国や地域はある?
あります。郵便番号の制度そのものを持たない国や地域は実在します。そこでは住所の特定を行政区と市区町村と通り名だけで行うため、現地の帳票に郵便番号欄はありません。
問題は国際的なサイトで起きます。郵便番号欄が必須になっていると、利用者は仕方なくゼロを並べたり、首都の番号を書いたりします。こうした値が一つのデータベースに混ざると、あとから郵便番号で地域を集計しても意味を持ちません。国によって必須と選填を切り替えられる作りにしておくのが現実的です。
前導ゼロはなぜ消えるのか
最も多い事故はこれです。郵便番号を数値として保存すると、先頭のゼロは数値としての意味を持たないため失われます。読み出したときには桁が一つ足りないだけに見えますが、郵便番号の上の桁は多くの場合で広い地域を決めているため、先頭が欠けると別の場所を指すことになります。
失われたゼロは元のデータから復元できません。規則で推測して埋め戻す方法もありますが、もとの値が正しかった保証は得られません。したがって対策は保存の段階しかありません。郵便番号は数値ではなく識別子であり、文字列として扱うのが原則です。電話番号と同じ扱いだと考えてください。
桁数だけで正しさを判断してよいのか?
よいわけがありません。桁数が合っていても、その値が実在するかは別の話です。桁数と文字種の確認で分かるのは、入力が書式の形をしているかどうかまでです。
さらに、桁数は固定ではありません。新しい方式が導入されたり、桁が追加されたりすることがあります。ある国の桁数をコードに直接書き込んでしまうと、変更のたびに修正が必要になります。桁数は表として外に出し、更新できる形にしておくほうが長持ちします。書式の確認と実在確認の違いについては住所の検証と正規化の違いで詳しく扱っています。
開発者向け: 郵便番号欄の設計
まず、保存の型は文字列にします。例外は作らないでください。整数型に入れた時点で、前導ゼロを持つ国の郵便番号は壊れます。
次に、必須かどうかを国ごとに持たせます。国を選んだ時点で必須が外れる設計にしておけば、郵便番号制度のない国でも同じフォームを使えます。
三つめは、許容する文字と長さの上限です。空白や記号を含む書式があるため、入力の段階で過度に絞り込むと、正しい値が弾かれます。利用者が貼り付けた値に余分な空白が混ざることも前提にしてください。
四つめは、テスト用のサンプルです。最短と最長の桁数、数字のみと英数字混在、前導ゼロ付き、そして郵便番号を使わない国の空値をそれぞれ用意します。国ごとの対応はISO 国家コードと行政区コードを、テストデータのまとめ方はテスト固定装置の住所データを参照してください。
書式を確かめる手順
手元で確かめるときは、まず対象国の郵便番号を数件集め、桁数と文字種を書き出します。次に前導ゼロを持つ値をデータベースに往復させ、保存と読み出しで変わらないことを確認します。最後に国を切り替えて、必須の状態と許容する文字が入れ替わるかを見ます。この三つで、郵便番号まわりの事故の多くは事前に潰せます。
次のステップ
まず、自分のプロジェクトで郵便番号を保持している型を確認してください。文字列以外になっていたら、そこが最優先の修正箇所です。次に、国を切り替えたときの必須と任意の挙動を一度触って確かめます。書式の整ったサンプルが必要なときはランダム住所生成で国を選んで生成でき、桁数と文字種がその国の方式に沿った値が得られます。