PHPで郵便番号から都道府県を導く処理が必要になりました。
郵便番号から住所を調べるには、日本郵便で公開されているCSVをDBに突っ込んで、クエリを投げるのですが、データサイズもでかいし、市区町村までは必要がないのでとりあえず都道府県だけを簡単に調べる方法がないか探していました。
適当に調べていたところ、郵便番号の先頭2桁を見ればいいだろうという記事が多いものの、一部の都道府県は他県に混ざっているものがあるらしいく、それに対応したコードが見つからなかったので、日本郵便の検索と格闘しながら新しくコードを用意することにしました。
で、以下のようになりました。
とりあえず動けばいいので、処理速度の最適化は確認していません。
/*==============================================================================
郵便番号から、都道府県番号を取得する簡易版
要素:
郵便番号(nnn-nnnn or nnnnnnn)
戻り値:
都道府県番号
※ 備考:
1 北海道
2 青森県
3 岩手県
4 宮城県
5 秋田県
6 山形県
7 福島県
8 茨城県
9 栃木県
10 群馬県
11 埼玉県
12 千葉県
13 東京都
14 神奈川県
15 新潟県
16 富山県
17 石川県
18 福井県
19 山梨県
20 長野県
21 岐阜県
22 静岡県
23 愛知県
24 三重県
25 滋賀県
26 京都府
27 大阪府
28 兵庫県
29 奈良県
30 和歌山県
31 鳥取県
32 島根県
33 岡山県
34 広島県
35 山口県
36 徳島県
37 香川県
38 愛媛県
39 高知県
40 福岡県
41 佐賀県
42 長崎県
43 熊本県
44 大分県
45 宮崎県
46 鹿児島県
47 沖縄県
2011-06-06 新設
------------------------------------------------------------------------------*/
function _prefecture_from_zip( $zip ){
if( preg_match( '/^01/', $zip ) ){ return 5; } // "秋田県"; }
else if( preg_match( '/^02/', $zip ) ){ return 3; } // "岩手県"; }
else if( preg_match( '/^03/', $zip ) ){ return 2; } // "青森県"; }
else if( preg_match( '/^0[4-9]/', $zip ) ){ return 1; } // "北海道"; }
else if( preg_match( '/^1[0-9]/', $zip ) ){ return 13; } // "東京都"; }
// ^20は欠番
else if( preg_match( '/^2[1-5]/', $zip ) ){ return 14; } // "神奈川県"; }
else if( preg_match( '/^2[679]/', $zip ) ){ return 12; } // "千葉県"; }
// ^28は欠番
else if( preg_match( '/^3[01]/', $zip ) ){ return 8; } // "茨城県"; }
else if( preg_match( '/^32/', $zip ) ){ return 9; } // "栃木県"; }
else if( preg_match( '/^3[3-6]/', $zip ) ){ return 11; } // "埼玉県"; }
else if( preg_match( '/^37/', $zip ) ){ return 10; } // "群馬県"; }
else if( preg_match( '/^3[89]/', $zip ) ){ return 20; } // "長野県"; }
else if( preg_match( '/^40/', $zip ) ){ return 19; } // "山梨県"; }
else if( preg_match( '/^4[1-3]/', $zip ) ){ return 22; } // "静岡県"; }
else if( preg_match( '/^4[4-9]/', $zip ) ){ return 23; } // "愛知県"; }
else if( preg_match( '/^50/', $zip ) ){ return 21; } // "岐阜県"; }
else if( preg_match( '/^51/', $zip ) ){ return 24; } // "三重県"; }
else if( preg_match( '/^520\-?046[1-5]$/', $zip ) ){ return 26; } // "京都府"; } // 特殊
else if( preg_match( '/^52/', $zip ) ){ return 25; } // "滋賀県"; }
else if( preg_match( '/^5[3-9]/', $zip ) ){ return 27; } // "大阪府"; }
else if( preg_match( '/^6[0-2]/', $zip ) ){ return 26; } // "京都府"; }
else if( preg_match( '/^630\-?027[12]$/', $zip ) ){ return 27; } // "大阪府"; } // 特殊
else if( preg_match( '/^63/', $zip ) ){ return 29; } // "奈良県"; }
else if( preg_match( '/^64/', $zip ) ){ return 30; } // "和歌山県"; }
else if( preg_match( '/^6[5-7]/', $zip ) ){ return 28; } // "兵庫県"; }
else if( preg_match( '/^68/', $zip ) ){ return 31; } // "鳥取県"; }
else if( preg_match( '/^69/', $zip ) ){ return 32; } // "島根県"; }
else if( preg_match( '/^7[01]/', $zip ) ){ return 33; } // "岡山県"; }
else if( preg_match( '/^7[23]/', $zip ) ){ return 34; } // "広島県"; }
else if( preg_match( '/^7[45]/', $zip ) ){ return 35; } // "山口県"; }
else if( preg_match( '/^76/', $zip ) ){ return 37; } // "香川県"; }
else if( preg_match( '/^77/', $zip ) ){ return 36; } // "徳島県"; }
else if( preg_match( '/^78/', $zip ) ){ return 39; } // "高知県"; }
else if( preg_match( '/^79/', $zip ) ){ return 38; } //"愛媛県"; }
else if( preg_match( '/^8[0-3]/', $zip ) ){ return 40; } // "福岡県"; }
else if( preg_match( '/^84/', $zip ) ){ return 41; } // "佐賀県"; }
else if( preg_match( '/^85/', $zip ) ){ return 42; } // "長崎県"; }
else if( preg_match( '/^86/', $zip ) ){ return 43; } // "熊本県"; }
else if( preg_match( '/^87/', $zip ) ){ return 44; } //"大分県"; }
else if( preg_match( '/^88/', $zip ) ){ return 45; } // "宮崎県"; }
else if( preg_match( '/^89/', $zip ) ){ return 46; } // "鹿児島県"; }
else if( preg_match( '/^90/', $zip ) ){ return 47; } // "沖縄県"; }
else if( preg_match( '/^91/', $zip ) ){ return 18; } // "福井県"; }
else if( preg_match( '/^92/', $zip ) ){ return 17; } // "石川県"; }
else if( preg_match( '/^93/', $zip ) ){ return 16; } // "富山県"; }
else if( preg_match( '/^9[45]/', $zip ) ){ return 15; } // "新潟県"; }
else if( preg_match( '/^9[67]/', $zip ) ){ return 7; } // "福島県"; }
else if( preg_match( '/^98/', $zip ) ){ return 4; } // "宮城県"; }
else if( preg_match( '/^99/', $zip ) ){ return 6; } // "山形県"; }
return NULL;
}
突込みがある人は遠慮なくどうぞ。
とりあえず、これで一つ機能が追加できたので、でめたしでめたし。