Определение местных / международных телефонных номеров для США. - PullRequest
4 голосов
/ 04 декабря 2010

Вы, наверное, думаете, что об этом спрашивали миллион раз, но я думаю, что мой вопрос немного другой. Большинство запросов на проверку номера телефона используются для проверки ввода пользователя. В моем сценарии я пытаюсь проверить входящие телефонные звонки на мобильный телефон в США и определить, звонят ли они из другой страны или из США.

Моя главная проблема в том, что я нахожусь в Великобритании и не имею опыта работы с телефонными номерами в США. Я читал о формате набора и т. Д. (Как международных, так и национальных), но меня беспокоит то, что телефон на телефоне получателя номера отображаются по-разному и в разных форматах.

Вот спецификация того, что я пытаюсь сделать ..

  • Представьте, что вы находитесь в США и получаете звонок на свой мобильный телефон
  • Определите, является ли звонок из США или другой страны
  • В Великобритании звонки могут поступать в местном или международном формате, он должен быть в состоянии определить, является ли это номер США или нет
  • Я считаю, что международные звонки могут отображаться на вашем телефоне в формате 0044 или +44 (если вы звонили из Великобритании в США)
  • Если звонок из США, это действительный номер телефона?
  • Удалите все нечисловые символы и переформатируйте в национальный формат. Например, британский номер 01530 123123 будет переформатирован в 01530123123
  • Удалите все нечисловые символы и переформатируйте в международный формат. Например, британский номер 01530 123123 будет переформатирован в 00441530123123

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

Есть мысли о том, как это сделать, фрагменты кода или примеры телефонных номеров? Я очень надеюсь, что кто-то из США сможет рассказать мне о форматировании телефонных номеров и т. Д.

Ответы [ 7 ]

3 голосов
/ 14 декабря 2010

Люди, которые говорят просто искать +1, мало работали с телефонными номерами. Код 1 страны распространяется на многие районы Северной Америки, а не только на США. То, что действительно должно произойти, - это некоторая логика вокруг таблиц, перечисленных для Североамериканского плана нумерации и в Списке кодов зоны североамериканского плана нумерации

Вот краткий список некоторых «исключительных» стран с номерами, начинающимися с +1, которые не основаны на США.

Бермудский:

  • После 1995 года: +1 441 (ххх) хххх

Пуэрто-Рико:

  • После 2001 года: +1 787 xxx xxxx или +1 939 xxx xxxx (оверлей для всего острова)

Виргинские острова США:

  • После 1997 года: +1 340 xxx xxxx

Северные Марианские острова:

  • После 1997 года: +1 670 ххх хххх

Guam:

  • После 1997 года: +1 671 ххх хххх

Американское Самоа:

  • После 2 октября 2004 года: +1 684 xxx xxxx

Сен-Мартен:

  • После присоединения к NANP: +1 721 xxx xxxx (дата будет определена позднее)
2 голосов
/ 09 декабря 2010

это будет делать

<?php
/**
  * function isUsPhone
  * {arg} $num string the number
  * {returns} bool
**/
function isUsPhone($num){ 
// for au use this 
// foreach(array('+', '0011') as $c){
foreach(array('+', '00') as $c){
 if(substr($num,0,strlen($c)+1) == $c.'1'){
  foreach(
   array(
    205, 251, 256, 334, 659, 938, 907, 250, 480, 520, 602, 623, 928, 327, 479, 501, 870, 209, 213, 310, 323, 341, 369, 408, 415, 424, 442, 510, 530, 559, 562, 619, 626, 627, 628, 650, 657, 661, 669, 707, 714, 747, 760, 764, 805, 818, 831, 858, 909, 916, 925, 935, 949, 951 , 303, 719, 720, 970 , 203, 475, 860, 959, 302, 202, 239, 305, 321, 352, 386, 407, 561, 689, 727, 754, 772, 786, 813, 850, 863, 904, 941, 954 , 229, 404, 470, 478, 678, 706, 762, 770, 912 , 808, 208, 217, 224, 309, 312, 331, 447, 464, 618, 630, 708, 730, 773, 779, 815, 847, 872, 219, 260, 317, 574, 765, 812, 319, 515, 563, 641, 712 , 316, 620, 785, 913, 270, 364, 502, 606, 859, 225, 318, 337, 504, 985, 207, 227, 240, 301, 410, 443, 667, 339, 351, 413, 508, 617, 774, 781, 857, 978 , 231, 248, 269, 313, 517, 586, 616, 679, 734, 810, 906, 947, 989 , 218, 320, 507, 612, 651, 763, 952, 228, 601, 662, 769, 314, 417, 557, 573, 636, 660, 816, 975, 406, 308, 402, 531, 702, 775, 603, 201, 551, 609, 732, 848, 856, 862, 908, 973 , 505, 575, 212, 315, 347, 516, 518, 585, 607, 631, 646, 716, 718, 845, 914, 917, 929 , 252, 336, 704, 828, 910, 919, 980, 984 , 701, 216, 234, 283, 330, 380, 419, 440, 513, 567, 614, 740, 937, 405, 539, 580, 918, 458, 503, 541, 971, 215, 267, 272, 412, 445, 484, 570, 582, 610, 717, 724, 814, 835, 878 , 401, 803, 843, 864, 605, 423, 615, 731, 865, 901, 931, 210, 214, 254, 281, 325, 361, 409, 430, 432, 469, 512, 682, 713, 737, 806, 817, 830, 832, 903, 915, 936, 940, 956, 972, 979 , 385, 435, 801, 802, 276, 434, 540, 571, 703, 757, 804 , 206, 253, 360, 425, 509, 564, 304, 681, 262, 274, 414, 534, 608, 715, 920, 307
   ) as $a
  ){
   if(substr($num,strlen($c)+1,3) === (string) $a){
    echo "\n".substr($num,strlen($c)+1,3)."\n";
    return true;
    }
  }
  }
}
return false;
}
var_dump(isUsPhone('+18003343423'));
?>

"мы" - это мы теперь это номера без платы за проезд, бесплатные или специальные номера

в соответствии с Википедия кстати, как выУ нас есть номер Великобритании, у нас всегда будет префикс (иначе сам вызов был бы невозможен)

1 голос
/ 11 декабря 2010

Если оно начинается с + , а не 1 или начинается с 011 это "международный". Другое остальное это "народный".

Но «национальный» здесь означает Северную Америку, а не Соединенные Штаты Америки. Разница может быть важной в вашем случае. Если вам действительно нужно знать, является ли это США, а не Северная Америка, вам нужно проверить региональный код. В Северной Америке номера телефонов составлены следующим образом: + 1 (AAA) NNN-NNNN Где AAA - код города. Этот код города может сказать Вам, откуда он идет.

Список кодов городов можно получить здесь http://en.wikipedia.org/wiki/List_of_North_American_Numbering_Plan_area_codes. Обратите внимание, что когда назначается код города, он всегда будет в этом назначении, но некоторые коды городов могут быть добавлены в будущем.

РЕДАКТИРОВАТЬ: Телефонные коды 800, 822, 833, 844, 855, 866, 877, 880 до 882, 888 означает бесплатный (или резервный для будущего расширения Toll Free) и не может быть расположен более точно, чем в Северной Америке. Единственное, что вы уверены в этих номерах, они бесплатны в Северной Америке.

1 голос
/ 04 декабря 2010

Насколько мне известно, номера всегда начинаются с префикса кода страны, если они "пересекают границы", так что будет достаточно безопасно проверять +1 или 001, чтобы идентифицировать номер США.

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

0 голосов
/ 11 апреля 2014

Мы начали использовать библиотеку libphonenumber от Google. Это позволяет вам форматировать ваши телефонные номера в соответствии с несколькими международными форматами.

Здесь есть порт PHP: https://github.com/davideme/libphonenumber-for-PHP

0 голосов
/ 28 февраля 2013

Вы можете попробовать этот API, который предоставляет несколько форматов телефонных номеров при вводе номера для США. Из этого вы можете сказать, если это номер США или нет. Возвращает результат в JSON https://www.mashape.com/parsify/format#endpoint-Phone-Number

0 голосов
/ 12 декабря 2010

Номера США, которые локально начинаются с кода города, а некоторые имеют особое значение, например 555 или 800, и всегда всегда имеют одинаковое количество цифр. Некоторые из них могут быть введены в виде альфа-текста пользователем телефона, как 800CALLNOW, и вы не получите международный звонок в этом формате. Что касается вашего проекта, вам необходимо быть авторизованным и зарегистрированным инженером по работе с программным обеспечением мобильной сети и использовать стандартные модули кода для устройства или собирать статистику о вызовах, и вам, как правило, не нужно будет знать особенности, о которых вы спрашиваете, поскольку фильтрация сделать в этом модуле, и все, что вам нужно, это вывод переменной в качестве параметра. Организация в США, запрашивающая работу, должна будет предоставить вам спецификацию любых конкретных числовых форматов, которые могут встретиться, и, возможно, документ от национального регулятора связи, предполагающий, что эту работу вообще можно выполнить за пределами США. Если они не предоставили детали или не могут этого сделать, если их об этом попросят, то эта часть проекта не может быть удовлетворительно завершена.

...