Python 電話番号検証

Abid Ullah 2023年10月10日
  1. Python で電話番号を検証する
  2. Python で Phonenumbers ライブラリを使用する
  3. Python Phonenumbers ライブラリを使用して電話番号を解析する
  4. is_possible_number() メソッドを使用して電話番号を検証する
  5. is_valid_number() メソッドを使用して電話番号を検証する
  6. Geocoder クラスの description_for_number() メソッドを使用して電話番号の場所を見つける
  7. Carrier クラスの name_for_number() メソッドを使用して、電話番号のキャリアを検索する
  8. Python を使用して電話番号を検証し、追加情報を取得する
Python 電話番号検証

この Python の記事では、Python の phonenumbers ライブラリを使用して電話番号を検証する方法を示します。 Python を使用して電話番号を検証し、地域、国、大陸、キャリアに応じて表示するようにフォーマットする方法を学習します。

簡単な例から始めて、複雑な例に移ります。 では、Python に電話番号の検証とフォーマットを任せてみましょう。

Python で電話番号を検証する

電話番号の正確性を検証および検証することは、非常に困難な場合があります。 電話番号の形式は、国によって異なる場合があります。

同じ国内でも、かなりの違いがあるかもしれません。 同じ国コードを使用する国もあれば、複数の国コードを使用する国もあります。

一部の国では、同じ国コードを複数回使用することさえあります。

GitHub の Google の libphonenumber リポジトリにある図は、アメリカ合衆国、カナダ、およびカリブ海の島々がすべて +1 の同じ国際ダイヤル コードを使用していることを示しています。

電話番号は、セルビア、スロベニア、またはモロッコの国コードを使用して、コソボから呼び出すことができます。 これらは、電話番号を識別または検証する際の問題のほんの一部です。

一見すると、RegEx を使用して電話番号の国コードを検証できるように見えます。 ただし、これは、国のコードを検証するには、世界中のすべての国に対して一意の RegEx ルールを作成する必要があることを示しています。

また、携帯電話会社ごとにガイドラインがあります(たとえば、特定の数字は特定の範囲の数字でしか使用できないなど)。 物事が急速に制御不能になる可能性があることがわかります。これにより、電話番号の入力を自分で検証することが非常に困難になります。

Python で Phonenumbers ライブラリを使用する

Python ライブラリが検証プロセスを効果的にガイドしてくれるので、私たちは幸運です。 このライブラリは Google の libphonenumber ライブラリから派生したもので、C++、Java、JavaScript などの他のプログラミング言語にも使用できます。

Python Phonenumbers ライブラリは、このライブラリを使用して作成されました。

この記事では、Python を使用して携帯電話番号を検証する方法を示します。

Phonenumbers ライブラリを Python にインストールする

統合モジュールのおかげで、Python を使用すると電話番号の検証が簡単になります。 このモジュールは phonenumbers モジュールと呼ばれます。

モジュールを利用するには、まずモジュールをインストールする必要があります。 pip を使用すると、次のことができます。

pip install phonenumbers

モジュールがインストールされると、国コードの電話番号を検証できます。

すべての設定が完了したので、Phonenumbers ライブラリを調べることができます。

Python Phonenumbers ライブラリを使用して電話番号を解析する

電話番号は、入力が Web フォームからのものか、テキスト抽出 (このガイドの後半で説明します) などの他のソースからのものかに関係なく、ほぼ確実に文字列になります。 検証やその他の目的で使用する前に、電話番号で解析し、PhoneNumber インスタンスに変換する必要があります。

ライブラリをインポートする

まず、必要なライブラリをインポートする必要があります。 電話番号 をインポートします。 carriertimezone、および geocoder もインポートする必要があります。

コード例:

import phonenumbers

電話番号を解析する

parse() メソッドのおかげで、電話番号から有用な情報を抽出できます。これには次のものが含まれます。

コード例:

import phonenumbers

My_number = "+92333920000"
Parse_number = phonenumbers.parse(My_number)

phonenumbers.parse() 関数を使用する場合、入力として電話番号文字列が必要です。 追加のオプション入力として、国別情報を ISO Alpha-2 形式で提供できます。

たとえば、次のコードを思い出してください。

Parse_number = phonenumbers.parse(My_number)

ISO Alpha-2 表記では、RO はルーマニアを表します。 このページを使用して、世界中のすべての国の Alpha-2 および数字の国コードを検索する場合があります。

必須でない限り、ISO Alpha-2 国コードはほとんどの場合省略されます。

phonenumbers.parse() を使用して、長さ、先行ゼロ、符号などの一般的な問題について電話番号を検証できます。 必要な条件のいずれかが満たされない場合、このメソッドは例外をスローすることに注意してください。

常にコードの try/catch ブロックに入れます。

電話番号が適切に処理されたので、検証フェーズに進むことができます。

is_possible_number() メソッドを使用して電話番号を検証する

Phonenumbers で電話番号を検証するには、2つの方法を使用できます。 これらのアプローチの主な違いは、それぞれの速度と精度のレベルです。

これをさらに説明するために、is_possible_number() 関数から始めましょう。

コード例:

電話番号をインポートする
マイナンバー = "+92333920000"
parse_number = phonenumbers.parse(マイナンバー)
print(電話番号.is_possible_number(Parse_number))

出力:

True

プログラムは、出力として True の値を生成します。

is_valid_number() メソッドを使用して電話番号を検証する

今度は同じ番号を使用しますが、今回は is_valid_number() メソッドを使用してその有効性を確認します。

コード例:

import phonenumbers

My_number = "+92333920000"
Parse_number = phonenumbers.parse(My_number)
print(phonenumbers.is_valid_number(Parse_number))

出力:

False

インプットが同じでも、アウトプットは違う。

is_possible_number() は、電話番号の長さをチェックして有効性を推測しますが、is_valid_number() メソッドは、その長さ、プレフィックス、および地域をチェックします。

phonenumbers.is_possible_number()は、phonenumbers.is_valid_number()よりも大きな電話番号リストの反復処理が高速です。 示されているように、これらの結果は常に正確であるとは限りません。

長い電話番号をすばやく削除すると便利です。 使用するのは危険です。

Geocoder クラスの description_for_number() メソッドを使用して電話番号の場所を見つける

電話番号は、その所有者に関する多くの詳細を明らかにする可能性があり、その一部は 我々 の調査に関連している可能性があります。 電話番号に関連付けられた特定のキャリアは、製品の全体的なコストの要因であるため、さまざまなアプリケーション プログラミング インターフェイス (API) または API エンドポイントを使用する必要がある場合があります。

真夜中にメッセージを送信することを避けることができるように、顧客 (電話番号) の場所のタイムゾーンに基づいてプロモーション通知を送信したい場合があります。 誤って目を覚ますのを防ぎます。

電話番号の場所に関する情報を取得して、状況に関連する情報を提供することもできます。 Phonenumbers ライブラリは、ユーザーがこれらの要件を満たすために必要なツールにアクセスできるようにします。

geocoder クラスで利用可能な description_for_number() メソッドを使用して、場所から始めます。 パラメータは、解析された電話番号と言語の短縮名です。

以前使っていた偽の番号で試してみましょう。

コード例:

import phonenumbers
from phonenumbers import geocoder

My_number = phonenumbers.parse("+92333920000")
print("This number is from: " + geocoder.description_for_number(My_number, "en"))

出力:

This number is from: Pakistan

Carrier クラスの name_for_number() メソッドを使用して、電話番号のキャリアを検索する

carrier クラスにあるメソッド name_for_number() を使用します。

コード例:

import phonenumbers
from phonenumbers import carrier

My_number = phonenumbers.parse("+92333920000")
print("The carrier of the number is: " + carrier.name_for_number(My_number, "en"))

コードの出力:

The carrier of the number is: Ufone

Python を使用して電話番号を検証し、追加情報を取得する

コード例:

import phonenumbers
from phonenumbers import carrier, timezone, geocoder

my_number = phonenumbers.parse("+92333920000", "GB")
print((phonenumbers.is_valid_number(my_number)))
print("The carrier of the number is: " + carrier.name_for_number(my_number, "en"))
print("The content and the city of the number are:")
print(timezone.time_zones_for_number(my_number))
print(
    "The country this number belongs to is: "
    + geocoder.description_for_number(my_number, "en")
)

出力:

True
The carrier of the number is: Ufone
The content and the city of the number are:
('Asia/Karachi',)
The country this number belongs to is: Pakistan

これは、数値が有効かどうかを判断する方法です。 出力に True が表示されます。これは、Python コードで使用されている数値が正しいことを示しています。

番号のキャリアを見つけることもできます。 私たちの場合、それはUfoneです。

キャリアとともに、国、大陸、都市の名前を見つけることができます。 私たちが使用した番号によると、その番号はアジア、パキスタン、およびカラチ市からのものです。

著者: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.

LinkedIn