電話番号をうまく扱うライブラリ(libphonenumber)の活用方法を考えてみる
1. 背景
社内で共有された以下の資料で、Googleが作成しているlibphonenumberという電話番号のバリデーションができるライブラリが紹介されていました。
自分が担当しているサービスは電話番号の入力が必須であり何かしら使えそうだということで活用方法を考えてみました。
2. libphonenumberの機能
僕はRubyを使用しているのでmobi/telephone_numberでできることをまとめます。
無効な電話番号を判定する
tel = TelephoneNumber.parse("00000000000", :JP) tel.valid? #=> false
電話番号から市区町村を特定する
以下のようにすることで電話番号から市区町村を求めることができます。 フリーダイヤルや携帯電話など市区町村が特定できない場合はnilが返却されます。
tel = TelephoneNumber.parse("0864xx29xx", :JP) tel.location #=> "Kurashiki, Okayama"
電話番号の種別を判別する
下記コードのように、TelephoneNumber#valid_typesメソッドを使って電話番号の種別を判別できます。
tel = TelephoneNumber.parse("08051xx93xx", :JP) tel.valid_types #=> [:mobile]
判別可能な番号種別
valid_types | 種別 |
---|---|
:area_code_optional | ※日本では使われていないよう |
:fixed_line | 固定電話 |
:mobile | 携帯電話(070, 080, 090) |
:no_international_dialling | 国際電話をかけることができないフリーダイヤル(0037, 0066, 0077, 0088など00から始まるフリーダイヤル) |
:pager | ポケベルやM2M等専用番号(020) |
:personal_number | 個人向け携帯電話番号(060) |
:premium_rate | ダイヤルQ2(0990から始まる電話番号※現在は使われていない) |
:shared_cost | ※日本では使われていないよう |
:toll_free | フリーダイヤル(0120, 0800, 0070, 0077, 0088, 0037など) |
:uan | ナビダイヤル(0570) |
:voicemail | ※日本では使われていないよう |
:voip | IP電話(050) |
固定電話・携帯電話・個人向け携帯電話以外に対してはSMSを送信できないため、 SMSを送信するようなサービスの場合、上記 判別可能な番号種別 をもとに送信対象を絞ることでSMS利用料の削減が期待できそうです。