テンプレート

データ取得

郵便番号検索で住所自動入力

更新日:2024-07-09

◆郵便番号検索で住所自動入力の見本

日本郵便が公開している「郵便番号検索API」を使用して、フォームへ郵便番号入力で住所を自動入力させる機能の動作見本です。郵便番号検索APIについてはこちらのサイトhttps://zipcloud.ibsnet.co.jp/doc/api

APIへのリクエストとレスポンスは以下の通りです。

リクエスト

パラメータ名 内容
zipcode(必須) 郵便番号
7桁の数字。ハイフン付きでも可。完全一致検索。
limit 最大件数
同一の郵便番号で複数件のデータが存在する場合に返される件数の上限値。(数字)

レスポンス

フィールド名 内容
status ステータス
正常時は 200、エラー発生時にはエラーコードが返される
results[*].address1 都道府県名

「*」はレスポンスで複数のデータが有った場合に数字で指定して取得。
1件しかない(1件目しか取得しない)場合はresults[0].address1で大丈夫です。(以下省略)
results[*].address2 市区町村名
results[*].address3 町域名
results[*].kana1 都道府県名カナ
results[*].kana2 市区町村名カナ
results[*].kana3 町域名カナ
results[*].prefcode 都道府県コード
JIS X 0401 に定められた2桁の都道府県コード。

動作サンプル【sample】

コード例 - Sample

HTML

<div class="example">
 <div class="postcode">
  <div class="postcode-in">
   <label>〒 <input type="text" name="num1" maxlength="3"> - <input type="text" name="num2" maxlength="4"></label>
   <p id="waiting-serach"></p>
  </div>
  <div class="postcode-out">
   <label><input type="text" id="address1" readonly> 都道府県名</label>
   <label><input type="text" id="address2" readonly> 市町村名</label>
   <label><input type="text" id="address3" readonly> 町域名</label>
   <label><input type="text" id="address4" readonly> 都道府県コード</label>
  </div>
 </div>
</div>

CSS

▶CSSは装飾用なので設置しなくても可

<style>
.example>.postcode>.postcode-in{
 display: flex;
 flex-direction: row;
 flex-wrap: nowrap;
 align-items: center;
 border-bottom: 1px solid #e5e5e5;
 padding-bottom: 1rem;
 margin-bottom: 1rem;
}
.example>.postcode>.postcode-in>label>input[type=text],
.example>.postcode>.postcode-out>label>input[type=text]{
 width: 100%;
 font-size: 0.9rem;
 line-height: 1.2em;
 background-color: #e5e5e5;
 border: 1px solid #000;
 border-radius: 2px;
}
.example>.postcode>.postcode-in>label>input[type=text]{
 width: 4rem;
}
.example>.postcode>.postcode-in>#postcode-bt{
 font-size: 0.7rem;
 line-height: 1em;
 background-color: #e5e5e5;
 border: 1px solid #a9a9a9;
 border-radius: 3px;
 padding: 0.5em 1em;
 margin-left: 10px;
}
.example>.postcode>.postcode-out{
 display: flex;
 flex-direction: column;
 flex-wrap: nowrap;
}
.example>.postcode>.postcode-out>label>input[type=text]{
 width: 15rem;
}
@media screen and (max-width:768px){
 .example>.postcode>.postcode-out>label{
  display: inline-flex;
  flex-direction: column;
  margin-bottom: 0.5rem;
 }
}
</style>

JavaScript

<script>
//ボタンクリック用
document.getElementById('postcode-bt').addEventListener('click', function(){
 let postnum1 = document.getElementsByName('num1')[0].value; //郵便番号左側取得
 let postnum2 = document.getElementsByName('num2')[0].value; //郵便番号右側取得

 postcodeGetFunc( postnum1, postnum2 );
});

//async(非同期)で住所情報を取得
async function postcodeGetFunc( n1, n2 ){

 //リクエストURLを構成
 let makeQuery = 'https://zipcloud.ibsnet.co.jp/api/search?zipcode=' + String( n1 ) + String( n2 ); //引数を整数で加算処理しないように文字列に変換//郵便番号検索APIへHTTPリクエスト(awaitでレスポンスが返ってくるまで待機)
 await fetch( makeQuery )
 .then( async response=>{ //レスポンスを取得
  let result = await response.json(); //jsonメソッド呼び出しで変数へ格納(awaitでレスポンスが返ってくるまで待機)

  //レスポンスstatusが200(正常)かつ、resultsがnull(空)でないとき処理を継続
  if( result.status == 200 && result.results != null ){

   //各テキストエリアにデータ格納
   document.getElementById('address1').value = result.results[0].address1;
   document.getElementById('address2').value = result.results[0].address2;
   document.getElementById('address3').value = result.results[0].address3;
   document.getElementById('address4').value = result.results[0].prefcode;
  }
 });
}
</script>

動作例 - Sample

▶「郵便番号」を入力すると「都道府県名」・「市町村名」・「町域名」・「都道府県コード」結果が表示されます ▶数字入力以外は削除されます ▶動作見本には「取得判定テキスト表示」「数字入力判定」「全角数字→半角数字変換」の処理は含んでいません

検索