Как разделить номер мобильного телефона на код страны, код региона и местный номер?
Как разделить номер мобильного телефона на код страны, код региона и местный номер? 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 местный номер на Майорке (не реальный)