Два текстовых файла внутри архива. Сделал минут 20 назад. dl.dropbox.com/u/8251541/tel_codes.rar
Эту ссылку можете дать на хабре, может, кому тоже пригодится. Заодно ошибки Ростелекомовские поищем вместе.
Все же я думаю что без базы знаний (как её реализовывать не принципиально) не обойтись.
Привязка телефонного номера должна быть к определенной территории (точность мы сами выбираем, хотим до населенного пункта — один размер базы, хотим до дома — другой).
Аналогично и с операторами сотовой связи — у них так же есть свои внутренние коды привязанные к территории страны.
На хабре не зарегистрирован, поэтому не могу прокомментировать статью Форматирование телефонных номеров на PHP, а контакты автора не нашел. Увидел, что Вы принимаете активное участие в обсуждении, поэтому написал Вам с просьбой опубликовать мой комментарий. Прошу прощения за беспокойство.
В России длина телефонного номера вместе с кодом города или с кодом оператора равна точно 10 цифрам. Как заметили в комментариях коды городов «Уфа 347, Стерлитамак 3473, Агидель 34731» имеют разную длину, но в Уфе длина городского номера 7 цифр, в Стерлитамаке — 6, а в Агидели — 5, т. е. в сумме длина всегда 10 цифр.
Первые три цифры кода каждого из городов одинаковы — 347, и эти цифры можно назвать телефонным кодом региона в целом (по аналогии с КЛАДР, как это также заметили в комментариях). Для каждого региона России существует обычно один такой общий псевдокод региона, но в Москве их два — 499 и 495. Т. е. для всех регионов России существует менее 90 кодов (не настолько большая цифра, чтобы прибегать к услугам базы данных).
Распределение кодов регионов по карте России тоже имеет некоторые закономерности: 45х-49х — Центральная Россия, окруженная 81х — 87х (с севера на юг вторая цифра обычно увеличивается), в глубь страны идут 34х-39х, и Саха с Дальним Востоком имеют коды 41х-42х. Калининградская область («на отшибе») имеет код 401. Так что и на основании этих данных можно осуществить проверку правильности ввода телефонного номера.
Но не бывает правил «10 цифр (код+номер)» без исключений. Точно знаю, что в Московской области телефоны вида: (49645) х-хх-хх заменяются на (245) х-хх-хх (496 заменяется на 2), по другим регионам информации у меня нет.
Итак, регион находим по первым трем цифрам 10-значного номера, уточняем положение внутри региона добавляя еще 1 или 2 следующих цифры. Для корректного форматирования номера стационарного телефона уже придется иметь базу кодов городов, чтобы точно отделить номер от кода. Всего кодов российских городов в открытых источниках мне удалось найти более 2000.
Что касается кодов мобильных операторов, то по этому коду можно определять принадлежность номера к определенному региону. И если емкость 926 полностью принадлежит Москве и области, то в случае с 901 не все так просто, но не безнадежно. Например, (901)6000000 — (901)6009999 — это Респ. Хакасия (но не вся), а (901)9440000 — (901)9449999 — Архангельская область (тоже не вся). Для каждого региона может быть назначено несколько последовательностей (емкостей) внутри одного кода оператора. Впрочем, это уже не вопрос форматирования, т. к. длина номера с кодом и здесь — ровно 10 цифр.Общее число непрерывных последовательностей (регион, код, диапазон, дата открытия диапазона) в России более 3500, т. е. без базы данных проверить корректность номера и/или принадлежность к определенному региону также проблематично.
Это задача из Data Quality.
Простым деревом не решить.
тут нужен аналог КЛАДР.
Ведь как ни крути а телефонный номер — это тот же адрес, только электронный. В нем зашита и страна, и город, и даже район города, а при нужных базах дом и квартира. =)
А так как адреса никогда в дерево утрамбовать не получиться, то и решение идеальным не будет.
То что у вас сделано, достойно, но не покрывает всего поля вариантов.
Есть специальные сервисы которые зарабатывают на такой чистке данных.
Поверьте на слово, они не будут продавать услуги основанные на простом коде, так как задача требует сложных алгоритмов.
В российском сегменте такими задачами занимаются iqsystems.ru и hflabs.ru
Есть еще, но эти компании наиболее продвинулись по данному направлению.
у бухов есть такая операция называется «крыжить». Означает сверять что то с чем то путем визуального сравнения и проставления крыжиков, то есть галочек, или плюсиков у кого что.
>Многие из нас — гики, пользователи наших продуктов — нет
Золотые слова. Тестируйте интерфейсы на бабушках и дедушках — если они разберуться значит удачно.
Уровень первичной компетенции не должен влиять на восприятие продукта. Если в общем виде.
>Многие из нас — гики, пользователи наших продуктов — нет
Золотые слова. Тестируйте интерфейсы на бабушках и дедушках — если они разберуться значит удачно.
Уровень первичной компетенции не должен влиять на восприятие продукта. Если в общем виде.
Когда надо за сутки уговорить людей из 100 городов пойти в определенное место и прочитать и переслать код.
Координаты… =)) Вот заставить 100 незнакомых людей залезть в грязь это да=).
Не могу согласиться.
Излишне «закрученная» валидация тоже чести системе не делает.
Ведь не все правила можно предусмотреть и позиция от разрешения имхо все же не юзабельна.
Отсекать ошибки — да, но разрешать только то что знаю — увольте.
Конечно запрещать в поле сумма вводить только цифры с разделителем — согласен, но не всё так очевидно.
Не стоит недооценивать «подумать над задачей»
В большинстве случаев это очень полезно, особенно если задача на первый взгляд кажется простой.
Приведу пример.
Нужно загнать к КЛАДР несколько десятков миллионов записей адресов вбитых в операторами в одну строку.
на первый взглят проще некуда. Шаблоны+парсинг\матчинг и поехали допиливать шаблоны и алгоритмы
Так поступил один поставщик
Второй подумал. И сделал подругому.
В итоге первый поставщик на выходе 95% неплохо правда? НО! 5% от десяти млн. сколько? Очень много. Отдать на ручной разбор? А кто заплатит? Клиент? Щас… разбежались. Посадить сотню «негров» на пару лет и за них платить никого не радует.
Второй поставщик подумав выдал 99,8% точность разбора.
Итог очевиден. 4 % разницы решили исход. Потому как ручной разбор 4% стоит больше чем компании разработчики вместе взятые.
ПС. чуть не забыл
Первый поставщик разбирал на сервере с трехзначной цифрой гигов в ОЗУ, а второй на ноуте =) и у второго получалось быстрее.
Так что математика 7-8 класса не всегда достаточна.
>Пока это головная боль тех кто тестирует. Из 12 устройств, 9 из которых были >прототипами, за месяц бенчмарков убили 4. В том числе одно готовое (по мнению >производителя). У 2 сдохли нанды, у 2 — рамы.
Судя по тестам производитель может и не успеть поставить замену с такой скоростью поломок. С другой стороны понятно что прототипы в пром эксплуатацию ставить никто не будет.
цитата:
Два текстовых файла внутри архива. Сделал минут 20 назад.
dl.dropbox.com/u/8251541/tel_codes.rar
Эту ссылку можете дать на хабре, может, кому тоже пригодится. Заодно ошибки Ростелекомовские поищем вместе.
А вообще рад что эта тема начинает развиваться.
потому как давно известно «Мусор на входе = мусор на выходе»
Основная проблема в DQ именно актуальные справочники.
Привязка телефонного номера должна быть к определенной территории (точность мы сами выбираем, хотим до населенного пункта — один размер базы, хотим до дома — другой).
Аналогично и с операторами сотовой связи — у них так же есть свои внутренние коды привязанные к территории страны.
Здравствуйте, Александр!
На хабре не зарегистрирован, поэтому не могу прокомментировать статью Форматирование телефонных номеров на PHP, а контакты автора не нашел. Увидел, что Вы принимаете активное участие в обсуждении, поэтому написал Вам с просьбой опубликовать мой комментарий. Прошу прощения за беспокойство.
В России длина телефонного номера вместе с кодом города или с кодом оператора равна точно 10 цифрам. Как заметили в комментариях коды городов «Уфа 347, Стерлитамак 3473, Агидель 34731» имеют разную длину, но в Уфе длина городского номера 7 цифр, в Стерлитамаке — 6, а в Агидели — 5, т. е. в сумме длина всегда 10 цифр.
Первые три цифры кода каждого из городов одинаковы — 347, и эти цифры можно назвать телефонным кодом региона в целом (по аналогии с КЛАДР, как это также заметили в комментариях). Для каждого региона России существует обычно один такой общий псевдокод региона, но в Москве их два — 499 и 495. Т. е. для всех регионов России существует менее 90 кодов (не настолько большая цифра, чтобы прибегать к услугам базы данных).
Распределение кодов регионов по карте России тоже имеет некоторые закономерности: 45х-49х — Центральная Россия, окруженная 81х — 87х (с севера на юг вторая цифра обычно увеличивается), в глубь страны идут 34х-39х, и Саха с Дальним Востоком имеют коды 41х-42х. Калининградская область («на отшибе») имеет код 401. Так что и на основании этих данных можно осуществить проверку правильности ввода телефонного номера.
Но не бывает правил «10 цифр (код+номер)» без исключений. Точно знаю, что в Московской области телефоны вида: (49645) х-хх-хх заменяются на (245) х-хх-хх (496 заменяется на 2), по другим регионам информации у меня нет.
Итак, регион находим по первым трем цифрам 10-значного номера, уточняем положение внутри региона добавляя еще 1 или 2 следующих цифры. Для корректного форматирования номера стационарного телефона уже придется иметь базу кодов городов, чтобы точно отделить номер от кода. Всего кодов российских городов в открытых источниках мне удалось найти более 2000.
Что касается кодов мобильных операторов, то по этому коду можно определять принадлежность номера к определенному региону. И если емкость 926 полностью принадлежит Москве и области, то в случае с 901 не все так просто, но не безнадежно. Например, (901)6000000 — (901)6009999 — это Респ. Хакасия (но не вся), а (901)9440000 — (901)9449999 — Архангельская область (тоже не вся). Для каждого региона может быть назначено несколько последовательностей (емкостей) внутри одного кода оператора. Впрочем, это уже не вопрос форматирования, т. к. длина номера с кодом и здесь — ровно 10 цифр.Общее число непрерывных последовательностей (регион, код, диапазон, дата открытия диапазона) в России более 3500, т. е. без базы данных проверить корректность номера и/или принадлежность к определенному региону также проблематично.
С уважением,
Илья
перенумерация (дефалтсити тому пример), присоединение населенных пунктов.
да и просто новые коды городов?
Простым деревом не решить.
тут нужен аналог КЛАДР.
Ведь как ни крути а телефонный номер — это тот же адрес, только электронный. В нем зашита и страна, и город, и даже район города, а при нужных базах дом и квартира. =)
А так как адреса никогда в дерево утрамбовать не получиться, то и решение идеальным не будет.
То что у вас сделано, достойно, но не покрывает всего поля вариантов.
Есть специальные сервисы которые зарабатывают на такой чистке данных.
Поверьте на слово, они не будут продавать услуги основанные на простом коде, так как задача требует сложных алгоритмов.
В российском сегменте такими задачами занимаются iqsystems.ru и hflabs.ru
Есть еще, но эти компании наиболее продвинулись по данному направлению.
не сглазить бы…
Такими проектами можно гордиться.
Ссылку в избранное и всем знакомым юристам и деловым партнерам.
хм…
Прикрутить к распределенным вычислениям и будет неубиваемая система, которая стоит нигде и везде одновременно.
Золотые слова. Тестируйте интерфейсы на бабушках и дедушках — если они разберуться значит удачно.
Уровень первичной компетенции не должен влиять на восприятие продукта. Если в общем виде.
Золотые слова. Тестируйте интерфейсы на бабушках и дедушках — если они разберуться значит удачно.
Уровень первичной компетенции не должен влиять на восприятие продукта. Если в общем виде.
Когда надо за сутки уговорить людей из 100 городов пойти в определенное место и прочитать и переслать код.
Координаты… =)) Вот заставить 100 незнакомых людей залезть в грязь это да=).
Излишне «закрученная» валидация тоже чести системе не делает.
Ведь не все правила можно предусмотреть и позиция от разрешения имхо все же не юзабельна.
Отсекать ошибки — да, но разрешать только то что знаю — увольте.
Конечно запрещать в поле сумма вводить только цифры с разделителем — согласен, но не всё так очевидно.
В большинстве случаев это очень полезно, особенно если задача на первый взгляд кажется простой.
Приведу пример.
Нужно загнать к КЛАДР несколько десятков миллионов записей адресов вбитых в операторами в одну строку.
на первый взглят проще некуда. Шаблоны+парсинг\матчинг и поехали допиливать шаблоны и алгоритмы
Так поступил один поставщик
Второй подумал. И сделал подругому.
В итоге первый поставщик на выходе 95% неплохо правда? НО! 5% от десяти млн. сколько? Очень много. Отдать на ручной разбор? А кто заплатит? Клиент? Щас… разбежались. Посадить сотню «негров» на пару лет и за них платить никого не радует.
Второй поставщик подумав выдал 99,8% точность разбора.
Итог очевиден. 4 % разницы решили исход. Потому как ручной разбор 4% стоит больше чем компании разработчики вместе взятые.
ПС. чуть не забыл
Первый поставщик разбирал на сервере с трехзначной цифрой гигов в ОЗУ, а второй на ноуте =) и у второго получалось быстрее.
Так что математика 7-8 класса не всегда достаточна.
Насколько критичен был простой?
или все таки на тестовом стенде гоняли?..
Судя по тестам производитель может и не успеть поставить замену с такой скоростью поломок. С другой стороны понятно что прототипы в пром эксплуатацию ставить никто не будет.