PHPで実在しない郵便番号をエラーにする

先週は郵便番号のフォーマットを自動で統一化する方法についての記事を書きました。

書いていて次の疑問がわきました。

フォーマットは正しいけれど実在しない郵便番号をエラーにできないものか?

郵便番号が実在するかどうかは、計算式では求められません。
既存情報と比較照合し、存在するかどうかをチェックしなければいけません。

PHPでそもそもそんなことが可能なのでしょうか?

いろいろ疑問に思いつつも、いつものごとくググりながら調べ、対応してみました。

結論:PHPで郵便番号の実在チェックは可能です。

まずは論より証拠です。
以下のサンプルでは、実在しない郵便番号をエラーにしています。

実在しない郵便番号をエラーにするサンプル

ソースはこちらです

郵便局には郵便番号を照合できるサービスがありこれを利用します

郵便局のサイトには、だれでも利用できる郵便番号検索照合サービスがあります。
例えば939-1324であれば、次のURLを入力すれば照合できます。

http://zipcloud.ibsnet.co.jp/api/search?zipcode=9391324

郵便番号を渡すと、その結果該当する住所が帰ってきます。
正しくない場合は住所が返ってきません。

これを利用し、郵便番号が実在するかどうかをチェックしています。

疑問:PHPでどうやって実現するの?

郵便番号照合サービスは、どちらかといえばJqueryで使うことを前提としています。
つまり、郵便番号を入力すると住所が自動で入る処理などに利用されます。

ではこれをどうやれば、PHPで実現できるのでしょう?
今回最も疑問に感じた部分でしたが、ちゃんとやり方がありました。

PHPにもちゃんと対応した関数があります

PHPからでも、郵便番号照合サービスを呼び出すことができます。
そのためには2つの関数を使用します。

(1)照合サービス呼び出しにfile_get_contents()を使います

file_get_contents()関数は、URLなどを引数として渡すとその結果をテキストとして返してくれます。
例えば、正しい郵便番号で呼び出すと以下のテキストが返ってきます。

ちなみに存在しない郵便番号の場合は、以下のようなテキストが返ります。

“results”の項目がnullの場合「該当郵便番号は存在しない」と判断できます。

しかしながら、この状態ではPHPでは細かく参照することができません。
なぜならば、{}も[]もただのテキストでしかないためです。

そこで次の関数を使用します。

(2)PHPで参照できるようにjson_decode()関数を使って配列に変換します。

PHPで参照するためには、配列化するほうが使いやすいです。
そのために、json_decode()関数を使用します。

この関数は郵便番号照合サービスのように、JSON形式での結果を配列形式に変換してくれます。

上記の例だと、以下のように変換されます。

この形になれば、PHPから容易に参照できるようになります。

これを踏まえて今回のソースを見るとわかりやすいです

今回のソースはちょっと長いですが、ほとんど先週の記事と同じです。
今回付け足した部分は以下の部分になります。

思ったより少ない行数で実在チェックができています。
しかも照合を実行しているのは1行だけです。

このやり方にたどり着くまでは長かったですが、やり方は思ったより簡単な記述だけで済みました。

思い付きは調べれば何とかなるものです

今回は郵便番号のフォーマットチェック処理を作っていて、ふと郵便番号実在チェックを盛り込めば、より精度の高いチェックになるのではないか?と思いついたことから始めました。

そこでググり、調べ、試し、郵便番号実在チェックを盛り込むことができました。
言うは易し。
確かに易かったです。

思いのほかどうすればいいかわからず、四苦八苦いたしましたが、一つ一つ問題をクリアしていったら実現できていました。

今回も大変良い経験をいたしました。
本記事がお役に立てば幸いです。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております