ひとことで言うと: ZIP Code はアメリカ、Postal Code はカナダ、Postcode はイギリスとオーストラリア、PIN Code はインドで使われる呼び方です。どれも「郵便物を正しい届け先に届ける」という目的は同じですが、フォーマット・文字種・桁数・区切り文字のルールはそれぞれ異なります。国際対応のアドレスフォームを開発するとき、すべてを「zip code」という 1 つのフィールドで済ませようとすると、バグの温床になります。
各用語の意味
ZIP Code(アメリカ)
ZIP は Zone Improvement Plan の略で、1963 年に USPS が導入しました。基本フォーマットは 5 桁の数字(例:90210)。拡張形式の ZIP+4 はハイフンのあとに 4 桁を追加し(例:90210-1234)、特定のブロックや建物まで絞り込めます。
Postal Code(カナダ)
カナダでは A1A 1A1 というパターンの 6 文字を使います。英字と数字が交互に並び、真ん中にスペースが入ります。前半 3 文字(Forward Sortation Area)が地理的な区域、後半 3 文字(Local Delivery Unit)が具体的な届け先を示します。混同を避けるため、D・F・I・O・Q・U の英字は使われません。
Postcode(イギリス)
UK のポストコードはやや複雑で、「英字 1〜2 文字 + 数字 1〜2 桁 + 任意の英字 + スペース + 数字 1 桁 + 英字 2 文字」という構造です。例えば SW1A 1AA(バッキンガム宮殿)や EC2R 8AH。スペースの前(outward code)がエリアと地区、後ろ(inward code)がセクターと届け先を表します。
PIN Code(インド)
PIN は Postal Index Number の略で、6 桁の数字だけで構成されます(例:110001)。1 桁目が地域、2 桁目が副地域、3 桁目が仕分け区、残りの 3 桁が具体的な郵便局を示します。
国別比較表
| 国 | 呼称 | フォーマット | 桁数 | 文字種 | 例 | 区切り |
|---|---|---|---|---|---|---|
| アメリカ | ZIP Code | NNNNN or NNNNN-NNNN | 5 or 10 | 数字のみ | 10001, 90210-1234 | ZIP+4 でハイフン |
| カナダ | Postal Code | A1A 1A1 | 7(スペース込み) | 英字+数字 | K1A 0B1, V6B 3K9 | 中央にスペース |
| イギリス | Postcode | A9 9AA〜AA9A 9AA | 6-8(スペース込み) | 英字+数字 | SW1A 1AA, M1 1AE | 末尾 3 文字の前にスペース |
| オーストラリア | Postcode | NNNN | 4 | 数字のみ | 2000, 3000 | なし |
| ドイツ | Postleitzahl (PLZ) | NNNNN | 5 | 数字のみ | 10115, 80331 | なし |
| 日本 | 郵便番号 | NNN-NNNN | 8(ハイフン込み) | 数字のみ | 100-0001 | 3 桁目の後にハイフン |
| インド | PIN Code | NNNNNN | 6 | 数字のみ | 110001, 400001 | なし |
| フランス | Code Postal | NNNNN | 5 | 数字のみ | 75001, 13001 | なし |
| ブラジル | CEP | NNNNN-NNN | 9(ハイフン込み) | 数字のみ | 01001-000 | 5 桁目の後にハイフン |
| 韓国 | 우편번호 | NNNNN | 5 | 数字のみ | 03171, 06164 | なし |
開発者がこの違いを知っておくべき理由
複数の国のユーザーに対応するアプリで、zip_code VARCHAR(5) や数字のみの正規表現を使っていると、世界の大半の国で不具合が起きます。ありがちなミスを見ていきましょう。
ミス 1:数字だけの入力を強制する
カナダの郵便番号(V6B 3K9)や UK のポストコード(SW1A 1AA)など、英字を含む国は多数あります。数字のみのバリデーションルールは、これらの国の正当なアドレスを即座に弾いてしまいます。
ミス 2:スペースを除去する
UK ポストコードやカナダ Postal Code のスペースには意味があります。Royal Mail の宛名ガイドラインによると、SW1A1AA のようにスペースを取った形式は厳密には非標準です。郵便物は届くかもしれませんが、厳密なバリデーションには通りませんし、その国のユーザーから見ると「間違っている」ように映ります。
ミス 3:固定桁数を強制する
郵便番号の長さは 3 文字(アイスランド:101)から 10 文字(米国 ZIP+4:90210-1234)まで幅があります。桁数をハードコードすると、想定外の国の正規コードを拒否してしまいます。
ミス 4:万能な正規表現を 1 つだけ使う
すべての国の郵便番号を正しくバリデーションできる単一の正規表現は存在しません。米国 ZIP 用の ^\d{5}(-\d{4})?$ は、カナダ・UK・日本・ブラジルのコードをすべて不正と判定します。国ごとに分けたバリデーションが唯一の確実な方法です。
ミス 5:すべての国のユーザーに「ZIP Code」と表示する
カナダやイギリスのユーザーがいるフォームで「ZIP Code」と書くと、混乱を招きます。その用語を知らなかったり、「アメリカ専用のフォームだ」と思われたりします。「Postal Code」や「Postcode」を汎用ラベルにするか、選択された国に応じてラベルを動的に切り替えましょう。
データベース設計のおすすめ
すべての国を zip_code CHAR(5) に押し込めるのは やめましょう。実用的なガイドラインはこちらです:
推奨スキーマ:
postal_code VARCHAR(20) -- あらゆるフォーマットに対応
country_code CHAR(2) -- ISO 3166-1 alpha-2
インデックス:(country_code, postal_code)
ポイント:
- ユーザーが入力した そのままの形式 で保存する(スペースやハイフンを含めて)
- 正規化(スペース・ハイフン除去)は検索ロジック側でのみ行い、保存時には変えない
CHARではなくVARCHARを使う——末尾パディングが比較バグを引き起こす- フィールド長は余裕をもたせる(
VARCHAR(20))——エッジケースや将来のフォーマット変更にも対応 - 郵便番号には必ず
country_codeをセットで保存——同じ文字列(例:10001)が複数の国で有効な場合がある
国別バリデーション戦略
正しいアプローチは国ごとに分けたバリデーションです。主要フォーマットの正規表現をまとめます:
| 国 | 正規表現パターン | 備考 |
|---|---|---|
| アメリカ | ^\d{5}(-\d{4})?$ | ZIP+4 は任意 |
| カナダ | ^[A-Za-z]\d[A-Za-z]\s?\d[A-Za-z]\d$ | スペースは入力時任意 |
| イギリス | ^[A-Z]{1,2}\d[A-Z\d]?\s?\d[A-Z]{2}$ | 複雑なのでライブラリ推奨 |
| ドイツ | ^\d{5}$ | 常に 5 桁 |
| 日本 | ^\d{3}-?\d{4}$ | ハイフンは任意 |
| インド | ^\d{6}$ | 常に 6 桁 |
| オーストラリア | ^\d{4}$ | 常に 4 桁 |
| ブラジル | ^\d{5}-?\d{3}$ | ハイフンは任意 |
| フランス | ^\d{5}$ | 常に 5 桁 |
| 韓国 | ^\d{5}$ | 常に 5 桁(2015 年以降) |
重要: 正規表現が検証するのは フォーマット であって、実在性 ではありません。00000 は米国の正規表現を通過しますが、有効な ZIP Code ではありません。実在性の確認には郵便データベースの照会やバリデーション API が必要です。
複数国の郵便番号処理をテストするには
国際アドレス対応を構築するには、ターゲット国ごとのテストデータが必要です。各国のフォーマットを手動で調べる代わりに、AddressGen でフォーマットの正しいサンプルアドレスを生成できます:
- 米国アドレス生成器 — 5 桁 ZIP と ZIP+4 形式
- カナダアドレス生成器 — 英数字混合
A1A 1A1形式の Postal Code - 英国アドレス生成器 — 可変長の UK Postcode
カナダのシステムをさらに詳しく知りたい方は、カナダの郵便番号システム入門もご覧ください。
国ごとにアドレスを生成すれば、以下をカバーするテストマトリクスを作れます:
- すべての文字種(数字のみ、英字のみ、混合)
- すべての区切り種別(スペース、ハイフン、なし)
- 最短と最長の桁数
- エッジケース(先頭ゼロ、英数字の交互パターン)
開発者向け実装チェックリスト
国際アドレスフォームを作る・レビューするときの確認リストです:
- 郵便番号フィールドが英字・数字・スペース・ハイフンを受け付ける
- フィールド長が最低 10 文字ある
- バリデーションルールが選択された国に応じて切り替わる
- フィールドラベルが国に合わせて変わる(ZIP Code / Postal Code / Postcode / PIN Code)
- スペースとハイフンが保存時にそのまま残る
- データベースカラムが
VARCHARである(CHARやINTではない) - 万能正規表現ではなく国別パターンを使っている
- 先頭ゼロが保持される(例:米国
01001、オーストラリア0800) - テストデータがフォーマット規則の異なる 5 か国以上をカバーしている
よくある質問
「ZIP Code」と「Postal Code」は同じものですか?
機能的には同じで、どちらも郵便物を届け先にルーティングする仕組みです。ただし「ZIP Code」は USPS のアメリカ専用商標で、「Postal Code」は国際的な総称です。カナダでは「Postal Code」が正式名称。UI で間違った用語を使うと、ユーザーに違和感を与えます。
郵便番号がゼロで始まるのはなぜ?
アメリカでは北東部の州の ZIP Code が 0 で始まります(例:マサチューセッツ州 Amherst の 01001)。オーストラリアではノーザンテリトリーのコードが 0 始まりです(例:0800)。郵便番号を整数型で保存すると先頭ゼロが消えて無効なコードになります。郵便番号は必ず文字列として保存してください。
同じ郵便番号が複数の国に存在することはありますか?
あります。10001 はアメリカ(ニューヨーク)でも韓国(ソウル)でも有効なコードです。75001 はフランス(パリ)で有効で、他の国でもそれらしく見えるかもしれません。だからこそ、データベースでは郵便番号と国コードを必ずセットで管理する必要があります。
郵便番号のフォーマットは誰が決めていますか?
各国の郵便局がそれぞれ定めています。主な参考先:
- アメリカ: USPS Publication 28
- カナダ: Canada Post 宛名ガイドライン
- イギリス: Royal Mail Postcode Finder
- インド: India Post PIN Code Directory
- 国際: 万国郵便連合(UPU) が各国横断の標準を管理
本記事は教育・開発の参考を目的としています。対象国の最新の公式郵便ドキュメントでフォーマットをご確認ください。
