Как разделить номер мобильного телефона на код страны, код региона и местный номер?

Как разделить номер мобильного телефона на код страны, код региона и местный номер? e.g +919567123456 после разделения

код страны = 91

код = 9567

местный номер = 123456

7 ответов


невозможно анализировать телефонные номера с помощью простого алгоритма, вам нужно использовать таблицы данных, заполненные правилами каждой страны, потому что каждая страна разграничивает свои телефонные номера по-разному.

код страны довольно прост, просто используйте данные из код вызова страны статья в Википедии и построить таблицу всех уникальных кодов стран. Каждая страна имеет уникальный префикс, так что это легко.

но тогда тебе нужно искать правила для каждой страны, которую вы хотите поддержать и извлечь код(ы) области, используя правила для каждой страны.


Не поддерживайте свою собственную таблицу всех этих данных! Используйте " Java International Phone Number Utilities library v3.0", https://github.com/googlei18n/libphonenumber. Это то, что Google использует, и Google поддерживает его для вас!


Как уже упоминалось разными людьми, вы не можете сделать это с помощью простого сопоставления строк. Длины ни страны, ни коды не изменяются.

сделав это в прошлом, мы сохранили таблицу, аналогичную по структуре следующей : -

+------------+---------+-------+--------------+
|country_code|area_code|country|area          |
+------------+---------+-------+--------------+
|44          |1634     |UK     |Medway        |
|44          |20       |UK     |London        |
|964         |23       |Iraq   |Wasit (Al Kut)|
|964         |2412     |Iraq   |Unreal        |
+------------+---------+-------+--------------+

затем мы рассчитали максимальную длину 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_length через триггер, заботясь о том, чтобы справиться с нулевыми кодами области и индексировать таблицу в столбце match_string.


Я думаю, вам нужно что-то вроде словаря кода страны и региона. потому что Бут из них может иметь разную длину. США +1, Германия +49, даже + 6723. То же самое с Areacodes..


ответ очень сильно зависит от страны. Нет универсальная правило говорит: "это код страны, это код области, это местный номер". Единственная информация, которая может быть получена повсеместно, - это номер страны (и даже это может быть 1-4 цифры); затем вам нужно проконсультироваться с набором правил конкретной страны.

на примеры (например, " в данных странах есть много разных телефонных номеров, но все они следуют одному и тому же


Если вы стремитесь точный данные по Великобритании см. также http://code.google.com/p/ofcom-csverter/ для полного списка кодов зоны Великобритании с исправлениями.


очень сложная проблема. Сначала вам нужно определить код страны. В зависимости от кода страны, остальное должно быть разделено на код области и местный номер. Но ни одна из трех частей не имеет фиксированной длины, ни номер отверстия, ни код области и местной комбинации деталей!

пример: 4930123456789

  • 49-это код Германии
  • 30-это код Берлина
  • 123456789 местный номер в Берлин (не настоящий)

пример: 493328123456

  • 49-это код Германии
  • 3328-это код города Teltow
  • 123456-местный номер в Teltow (нет реального)

пример: 34971123456

  • 34-это код страны Испания
  • 971-это код города Майорка
  • 123456 местный номер на Майорке (не реальный)