3

国際電話番号のリストと国の電話番号のリストがあります。
数字から国を特定したいのですが、迅速かつエレガントな方法が見つかりません。

何か案が?私が得たのは、ハードコードされたチェックを行うことだけです(たとえば、「最初の数字を見て、2番目の数字を見てください。Xの場合は3番目の数字を確認します。2番目の数字がYの場合、国はFooです」など) .)。リストには PHP と DB (MySQL) を使用していますが、疑似コードが役立つと思います。

4

6 に答える 6

4

または、 Twilio Lookupなどのツールを使用することもできます。

Lookup で API リクエストを行うと、CountryCode常にプロパティが返されます。

https://www.twilio.com/docs/api/lookups#lookups-instance-properties

[開示:私はTwilioで働いています]

于 2016-08-18T23:03:14.947 に答える
0

ハードコーディングされたチェックは、呼び出しコードのリストから自動的に生成される決定ツリーに変換できます。ツリーの各ノードは、「現在の」文字、可能性のある次の文字 (ツリー ノード) のリスト、またはターミナル ノードの場合は国を定義します。ルート ノードは先頭の '+' 記号になります。

于 2010-12-20T23:03:53.597 に答える
-1

最初の番号から始めて、2番目の番号、というように、それが見つかるまで簡単に検索できます。これは、発信コードが別のコードのプレフィックスではないため、正しく機能します。つまり、国際通話コードは「プレフィックスコード」を形成します(電話システムはこのプロパティに依存します)。

私はPHPが得意ではないので、ここに単純なpython実装があります。うまくいけば、フォローするのは簡単です:

>>> phone_numbers = ["+12345", "+23456", "+34567", "+45678"]
>>> country_codes = { "+1": "USA", "+234": "Nigeria", "+34" : "Spain" }
>>> for number in phone_numbers:
...     for i in [2, 3, 4]:
...         if number[:i] in country_codes:
...             print country_codes[number[:i]]
...             break
...     else:
...         print "Unknown"
...
USA
Nigeria
Spain
Unknown

基本的に、プレフィックスと国の間に連想配列があります(これは、ウィキペディアの記事から簡単に生成できると思います。連想配列で電話番号の最初の桁を検索してみてください。配列にない場合は、最初の2つを試してください。 3桁の後に一致するものがない場合、この番号は有効な国際発信コードで始まりません。

于 2010-12-20T23:25:24.553 に答える