郵便番号と住所の組み合わせバリデーション

郵便番号と都道府県/市区町村の組み合わせによるバリデーションについて

日本郵便の郵便番号データダウンロードからCSVをダウンロード。

PHP

/** * * 郵便番号と住所の組み合わせバリデーション * * @param int $zip * @param int $state * @param string $city * @return boolean */ function validateZip($zip, $state, $city) { $code = parse_ini_file('config/code.ini', true); $state_csv = $code['STATE_CSV']; // 都道府県毎の郵便番号CSV if (array_key_exists($state, $state_csv)) { $file_name = 'library/' . $state_csv[$state] . '.CSV'; } $fp = @fopen($file_name, 'r'); // CSV処理 $i = 0; while (($buffer = fgetcsv($fp, 200, ',')) !== FALSE) { // 郵便番号 $data[$i]['zip'] = $buffer[2]; // 市区町村 $data[$i]['city'] = mb_convert_encoding($buffer[7], 'UTF-8', 'SJIS'); // 通常対応のみ 1020072/千代田区 // if ($zip == $data[$i]['zip'] && $city == $data[$i]['city']) { // return TRUE; // } // 事業所対応 102xxxx/千代田区 if (substr($zip, 0, 3) == substr($data[$i]['zip'], 0, 3) && $city == $data[$i]['city']) { return TRUE; } $i++; } fclose($fp); return FALSE; }

東京都(13TOKYO.CSV)

CSV

13101,"100 ","1000000","トウキョウト","チヨダク","イカニケイサイガナイバアイ","東京都","千代田区","以下に掲載がない場合",0,0,0,0,0,0 13101,"102 ","1020072","トウキョウト","チヨダク","イイダバシ","東京都","千代田区","飯田橋",0,0,1,0,0,0 13101,"102 ","1020082","トウキョウト","チヨダク","イチバンチョウ","東京都","千代田区","一番町",0,0,0,0,0,0 (略) 13421,"10021","1002100","トウキョウト","オガサワラムラ","イカニケイサイガナイバアイ","東京都","小笠原村","以下に掲載がない場合",0,0,0,0,0,0 13421,"10021","1002101","トウキョウト","オガサワラムラ","チチジマ","東京都","小笠原村","父島",0,0,0,0,0,0 13421,"10022","1002211","トウキョウト","オガサワラムラ","ハハジマ","東京都","小笠原村","母島",0,0,0,0,0,0

事業所の郵便番号は都道府県毎の郵便番号CSVとは別のCSVで保持されており、事業者の希望により掲載されていない番号があるため、前3桁の郵便番号と市区町村をマッチして判定。

INI

[STATE_CSV] 1 = "01hokkai" 2 = "02aomori" 3 = "03iwate" 4 = "04miyagi" 5 = "05akita" 6 = "06yamaga" 7 = "07fukush" 8 = "08ibarak" 9 = "09tochig" 10 = "10gumma" 11 = "11saitam" 12 = "12chiba" 13 = "13tokyo" 14 = "14kanaga" 15 = "15niigat" 16 = "16toyama" 17 = "17ishika" 18 = "18fukui" 19 = "19yamana" 20 = "20nagano" 21 = "21gifu" 22 = "22shizuo" 23 = "23aichi" 24 = "24mie" 25 = "25shiga" 26 = "26kyouto" 27 = "27osaka" 28 = "28hyogo" 29 = "29nara" 30 = "30wakaya" 31 = "31tottor" 32 = "32shiman" 33 = "33okayam" 34 = "34hirosh" 35 = "35yamagu" 36 = "36tokush" 37 = "37kagawa" 38 = "38ehime" 39 = "39kochi" 40 = "40fukuok" 41 = "41saga" 42 = "42nagasa" 43 = "43kumamo" 44 = "44oita" 45 = "45miyaza" 46 = "46kagosh" 47 = "47okinaw"

サンプルは平成25年1月31日更新版を使用。埼玉、千葉、東京、神奈川のみ対応。

サンプル

郵便番号データのCSVは毎月25日以降に更新されているようなので、wgetでダウンロードさせる設定をCronに設定して運用。

2015年くらいまでlzh形式でも配布されていましたが今はzip形式のみになっていました。
2010年に国産の圧縮形式「LZH」のUNLHA32.DLLの開発中止へ、LZH形式使用中止を呼びかけで結構騒がれたのに、まだlzh形式で配布してるんですね。(zip形式もあります)

最新の記事

プロフィール

流されるままにウェブ業界で仕事しています。主にLAPP環境でPHPを書いています。最近はjQueryで遊んでいます。
※動作確認について