郵便番号データの置き場所

  cpl-zip.dat        郵便番号 → 市区町村の番号（5バイト固定・昇順）
  cpl-zip.json       市区町村の一覧（"都道府県<TAB>市区町村"）
  cpl-zip-town.idx   町域の位置（4バイト固定・cpl-zip.dat と同じ並び）
  cpl-zip-town.txt   町域の文字をつなげたもの

日本郵便が公開している ken_all（読み仮名を小書きで表記するもの・全国一括）を
変換したものです。郵便番号データは日本郵便が著作権を主張しておらず、
自由に配布・利用できます。
  https://www.post.japanpost.jp/zipcode/download.html

  収録　　　120,717 件（1,892 市区町村 ／ 78,662 町域）
  時点　　　2026年9月
  大きさ　　合計 約 2.0MB（うち町域が約 1.4MB）

都道府県・市区町村・町域（大字）まで入っています。
番地と建物名はお客様が打ちます。

町域は1件ぶんだけ読みます（最大96バイト）。
90万バイトのファイルを丸ごと読み込むことはありません。

管理画面「CIHWEBカート → 郵便番号データ」から新しいものを取り込むと、
uploads/cih-pay-link/ に置かれ、そちらが優先されます。
ここのファイルはプラグインの更新で入れ替わります。

----------------------------------------------------------------
作り直すとき（開発者向け）

管理画面の取り込みは uploads 側に書くので、同梱用のこの4本は
手で作り直します。日本郵便から ken_all.zip を落として解凍し、
KEN_ALL.CSV（Shift_JIS）から次の形で書き出します。

  cpl-zip.dat       1件5バイト。郵便番号を3バイト（ビッグエンディアン）、
                    市区町村の番号を2バイト。郵便番号の昇順に並べる。
                    同じ郵便番号が複数行あるときは最初の1件だけ。
  cpl-zip.json      "都道府県<TAB>市区町村" の配列。添字が上の市区町村の番号。
  cpl-zip-town.idx  1件4バイト。cpl-zip.dat と同じ並び順・同じ件数。
                    町域の位置を3バイト、バイト数を1バイト。
                    町域が無い郵便番号は 4バイトとも 0。
  cpl-zip-town.txt  町域の文字（UTF-8）をつなげたもの。同じ名前は1回だけ。

CSVの列は 3列目=郵便番号、7列目=都道府県、8列目=市区町村、9列目=町域
（0始まりで 2, 6, 7, 8）。市区町村は 65,535 種類まで、
町域のファイルは 16MB まで、町域1件は 255 バイトまで。

町域の欄には住所として使えない書き方が混ざるので、落とします。
（includes/zipcode.php の cpl_zip_clean_town() と同じ処理）

  以下に掲載がない場合           → 空
  ○○の次に番地がくる場合        → 空
  ○○（地階・階層不明）          → 空
  ○○（丁目）／○○（○○番地）  → 括弧から後ろを切る
  ○○一円                        → 末尾の「一円」を落とす

cpl-zip.dat と cpl-zip-town.idx は件数が一致していなければなりません。
一致しないときプラグインは町域を使わず、市区町村までで動きます
（ずれた町名を出すより、出さないほうが安全なため）。
