携帯電話番号を国番号、市外局番、市内番号に分割する方法は?例:分割後+919567123456
国コード= 91
市外局番= 9567
ローカル番号= 123456
単純なアルゴリズムで電話番号を解析することはできません。国ごとに電話番号の区切り方が異なるため、各国のルールが入力されたデータテーブルを使用する必要があります。
国コードはかなり簡単です。ウィキペディアの 国の呼び出しコード 記事からのデータを使用して、すべての一意の国コードの表を作成します。国ごとに一意のプレフィックスが付いているので、簡単です。
ただし、サポートするすべての国のルールを調べ、各国のルールを使用して市外局番を抽出する必要があります。
このすべてのデータの独自のテーブルを維持しないでください! 「Java International Phone Number Utilitiesライブラリv3.0」 https://github.com/googlei18n/libphonenumber を使用してください。これはGoogleが使用するものであり、Googleが管理します。
さまざまな人が述べたように、単純な文字列マッチングではこれを行うことはできません。国コードも市外局番も固定長です。
過去にこれを行った後、次のような構造のテーブルを維持しました。
+ ------------ + --------- + ------- + ------------- -+ | country_code | area_code | country | area | + ------------ + --------- + ----- -+ -------------- + | 44 | 1634 |イギリス|メドウェイ| | 44 | 20 |イギリス|ロンドン| | 964 | 23 |イラク| Wasit(Al Kut)| | 964 | 2412 |イラク|アンリアル| + ------------ + --- ------ + ------- + -------------- +
次に、area_codeとcountry_codeの最大長を計算し、最大長から開始して、一致するものが見つかるまで下に向かって部分文字列化することにより、文字列をチェックしました。
したがって、441634666788という番号が与えられます
部分文字列[1,7](7は最も長い国/市外局番の組み合わせの長さ)から開始し、一致が見つからなかった場合は、[1,6]に移動してUK/Medwayの一致を見つけました。
あまり効率的ではありませんが、うまくいきました。
[〜#〜]編集[〜#〜]
このようなものを試すこともできますが、完全なデータセットでテストするか、選択したDBではパフォーマンスが低下する可能性があるため、国や地域コードの選択に分解する必要があるかもしれません。
DECLARE @area_codes TABLE
(
country_code VARCHAR(10),
area_code VARCHAR(10),
country VARCHAR(20),
area VARCHAR(20),
match_string VARCHAR(MAX),
match_length INTEGER
)
INSERT INTO @area_codes VALUES ('44','1382','UK','Dundee', '441382%', 6)
INSERT INTO @area_codes VALUES ('44','1386','UK','Evesham', '441386%', 6)
INSERT INTO @area_codes VALUES ('44', '1', 'UK', 'Geographic numbers', '441%', 3)
DECLARE @number VARCHAR(MAX)
SET @number = '441386111111'
SELECT TOP 1 *
FROM @area_codes
WHERE @number LIKE match_string
ORDER BY match_length DESC
ヌルの市外局番に対処し、match_string列のテーブルにインデックスを付けるように注意しながら、トリガーを介してmatch_stringおよびmatch_lengthフィールドを維持します。
国や市外局番の辞書のようなものが必要になると思います。彼らのブースは異なる長さを持つことができるので。米国+1、ドイツ+49、さらに+6723。市外局番も同じです。
答えは国に大きく依存します。 niversal「これは国番号です。これは市外局番です。これは市内番号です」というルールはありません。普遍的に取得できる唯一の情報は国番号です(1〜4桁の長さでもかまいません)。次に、特定の国のルールセットを参照する必要があります。
の例(たとえば、「指定された国には多くの異なる電話番号がありますが、すべて同じですformat " ):
努力している場合正確英国のデータ http://code.google.com/p/ofcom-csverter/ も参照してください修正された英国の市外局番の完全なリスト。
非常に複雑な問題です。最初に 国コード を決定する必要があります。国コードに応じて、残りは市外局番と市内番号に分割する必要があります。ただし、3つのパーツのいずれも固定長ではなく、穴番号もエリアコードもローカルパーツの組み合わせもありません。
例:4930123456789
例:493328123456
例:34971123456