Как стать автором
Обновить

Комментарии 47

К моему несчастью, я нередко сталкиваюсь с тем, что поле индекса является обязательным.
Я довольно часто переезжаю. Вот и сейчас — что бы узнать свой индекс мне надо тратить время на поиски сайта с необходимой информацией, а потом и на нём искать свой индекс.
Было бы намного удобнее, если бы, в случае отсутствия заполненного индекса, он заполнялся бы автоматически по данным остальной части адреса.
Что-то мне подсказывает, что я не один такой =)
Теоретически можно эту информацию «выдирать» из этой базы сконструировав запрос вида
SELECT index FROM post_indices WHERE region ILIKE 'Ваш регион' AND city ILIKE 'Ваш город' AND ops_type = 'П';

Но чтобы избежать опечаток, названия областей, районов, городов пользователю нужно подсказывать при вводе, тем более, что в этой базе все республики, например, названы со словом «республика» на конце, отчего звучат непривычно (Адыгея республика, блинский блин).
Но практически в крупных городах даже на одной небольшой улице могут быть разные индексы. То есть с помощью этой базы можно лишь проверить, что нет грубых ошибок, что указав индекс /190.../, я указал на Петербург, но 190000 или 190999 сервису всё равно.
Да, так и есть. База Почты России детализирует только до населённого пункта (редко — до района в городе).
Хотите точности до дома — вам нужен ФИАС.
Есть и сервисы предоставляющие его: например раз и два
Ух-ты. Ребята по ссылкам молодцы!
Сколько времени было убито на войну сначала с КЛАДРом, а потом и с ФИАС. Разбор структуры, конвертация в нормальный формат, оптимизация, построение индексов… Теперь все это сидит где-то в темных глубинах одной малоизвестной облачно ERP. Эх, и видимо вместе с ней тихо помрет…
В 2GIS можно узнать индекс по адресу, просто кликнув по зданию…
К сожалению, одной и той же улице и населенному пункту может соответствовать несколько индексов. Поэтому можно уменьшить их число, но все равно придется задавать вопрос: «Выберите, какой из следующих индексов ваш».

Вот например, здесь вбейте «москва» и «ленинградский». Там 8 индексов.
Еще дополню. В прицнипе, неправильно, если Интернет-магазин требует жестко индекс. Он должен требовать заведения либо индекса, либо адреса. И во втором варианте уже менеджер должен через Интернет или по телефону позвонить в почтовое отделение и выяснить этот индекс. клиента эта проблема касаться не должна. По моему опыту, свой индекс не знают примерно 30% клиентов, это не так много.
Я привык при заполнении адресов писать только цифры, отвечающие за город (3-4 первые), остальное дополняю нулями. Нули — это почтамт, почта через него и так проходит.

Почему так делаю: последние цифры — это номер отделения уже внутри города (вообще, адресуемой единицы), и ошибка в номере отделения затягивает доставку просто очень сильно. Пока в не том отделении посылку отложат, пока решат, что делать (иногда пересылают в правильное, иногда отправляют телеграмму получателю, что зайдите в такое-то отделение), пока отправят телеграмму, а ее пока доставят — ой много воды утечет. Грубо, с ошибкой в номере отделения надо отправлять, если вместо персиков действительно хочется получить курагу :)
В больших городах может не так элегантно сработать.
Это в насколько больших? Как Москва? В Питере вроде все отделения в диапазоне 190000-190999 и то с поопусками
Хотя вполне быть что только у Москвы есть несколько базовых трёх цифр.
Вообще, идея отличная, но, как сказал товарищ выше, куда лучше после выбора региона подставлять основной индекс. Если человек захочет — исправит на более точный. Все равно основного индекса предостаточно — досылают в отделение по адресу.

И да, что делать с этим DBF-то? Мне бы в MySQL базу загрузить это дело — дальше сам уже сделаю.

P. S.: Нет, меня не забанили в гугле :-)
в самой же статье указано. и для мускула тоже. O_O
В смысле, что конвертировать можно?
Ну, конвертер в убунтовских репозиториях есть: dbf2mysql. Попробуйте его. Есть ли под винду — не знаю.
Я не очень хорошо пользуюсь шелом и совсем никогда не пользовался репозиториями. Но у меня есть сервер на линуксе и доступ к шелу, соответственно. Я в нем какие-то простейшие задачи только делал всегда.

Не подскажете подробнее, как мне этот конвертер скачать/поставить? Буду спасибо.
Если у вас Debian или Ubuntu: apt-get install dbf2mysql (предварить sudo для Ubuntu). Как пользоваться — сможете почитать по команде man dbf2mysql.

На форуме sql.ru её вызывют так:
dbf2mysql -d test -t dbftable -h localhost -U root -P pass -vv DOMA.DBF

SQL-код при этом пойдёт на стандартный вывод (на монитор), добавьте перенаправление после команды для вывода в файл:
dbf2mysql -d test -t dbftable -h localhost -U root -P pass -vv DOMA.DBF > file.sql
У меня просто линукс (по край ней мере, так сообщает команда uname -a). Как я понимаю, в этом случае репозиторий для дебиана/убунты мне не очень подходит.

Ладно, я попробую, наверное, под винду найти конвертер, а то вопросами замучаю :-)
Если вы работаете с MySQL, то наверняка используете и PHP, для него существует расширение dBase для работы с dbf: http://php.net/manual/ru/ref.dbase.php
image
У мея Красная Шапка 4.4.7-3
Если указывать индекс почтового хаба или города (с тремя нулями на конце), то посылка дойдет, но чуть позже. Для Интернет-магазинов это может быть критичным, поэтому они стараются указывать как-можно более точный индекс.
Чаще просто извещение никто не доставит, где посылка не знает, и она через 30 дней отправится обратно. Инфа 146%, проверено на большом количестве.
Да, такой риск есть. В целом, обсуждая вопрос доставки товара, корректность заполнения адреса многие знакомые магазины называют критически важным. Некоторые вообще считают, что нормальной практикой может являться запрос только телефона, обратный звонок, и детальное уточнение адреса доставки. В противном случае — расходы на обслуживание возврата товара могут быть существенны.
Эти индексы, будь они не ладны. Я, как человек довольно молодой, отправлял обычные письма всего несколько раз (и то — документы). Всегда приходится гуглить свой индекс. А вот в последний раз, несколько дней назад, я загуглил неверный индекс. Так что, идея с автоматическим проставлением индекса выглядит крайне круто. Надеюсь, когда-нибудь это станет обыденным делом.
Обычно, когда приходишь в почтовое отделение, его индекс где-нибудь написан крупными буквами. Можно прямо в отделении и заполнить.
Не, я товар заказывал в интернет магазине. Там нужно было ввести индекс.
Ну тогда в следующий раз идите не в гугл, а на сайт Почты России, там есть форма для поиска индекса по адресу. :)
Ага, как раз этой формой и воспользовался. Правда, сделал я это уже после заказа — для проверки индекса :)
Ну, ничего, почта говорит, что посылка нормально дойдёт, правда, немного позже.
В 2GIS можно узнать индекс по адресу, просто кликнув по зданию…
Жаль, 2GIS не всегда пишет индекс ближайшего почтового отделения (которое ответственно за это здание), а только адрес центрального почтового отделения (которое на весь населённый пункт).
В США zip коды повсеместно используются и это очень удобно. Zip код написан в ID (=> всегда можно посмотреть), По нему легко найти ближайшие магазины, примерно оценить как далеко находится тот или иной район, получить предложение о скидках и прочих услугах, google maps рисует район и прочее прочее. Жаль что в России с этим большая беда.
А что такое ID?
Есть 2 термина: DL и ID.
DL — driver's license, по-нашему водительское удостоверение. Удостоверяет личность и даёт право управления транспортным средством.
ID — identification card. Это карточка, которая выглядит как DL и используется только для удостоверения личности.

DL и ID являются полноценными удостоверениями личности, с ними и в банк можно прийти, и на самолёте полететь. Паспорт при этом лежит дома и отдыхает.

В обоих прописан полный адрес проживания, включая zip код.
Спасибо за интересную информацию! Всегда приятно узнать что-то о США :)
У «Триколор-ТВ» на техподдержке используется определение нас.пункта по индексу.
Эх, когда я весной искал не нашлось оно мне. И покатились велосипеды. :-)
Привет, народ. Мне для одного проекта потребовалось прикрутить эту базу, но ВСЕ НАЗВАНИЯ КАПСОМ!
Делюсь функцией на php, которая принимает строку (хоть капсом, хоть как) и делает каждое слово с большой буквы, кроме слов исключений, типа «район», «область» и т.д.
Особенности: первая буква слова в скобках тоже будет увеличена, слова могут быть разделены пробелом или тире.

Примеры работы, первая строка до обработки, вторая после обработки
  • МОСКОВСКАЯ ОБЛАСТЬ, ОДИНЦОВО
  • Московская область, Одинцово

  • САРАТОВСКАЯ ОБЛАСТЬ, КРАСНОАРМЕЙСКИЙ РАЙОН, САДОВОЕ
  • Саратовская область, Красноармейский район, Садовое

  • ТЮМЕНСКАЯ ОБЛАСТЬ, ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ
  • Тюменская область, Ханты-Мансийский-Югра автономный округ

  • САХА (ЯКУТИЯ) РЕСПУБЛИКА, ЯКУТСК
  • Саха (Якутия) Республика, Якутск

Код
/* 
Функция предназначена для нормализации написания названий населенных пунктов из базы индексов Почты России,
http://info.russianpost.ru/database/ops.html
Функция возвращает строку, где каждое слово пишется с большой буквы, кроме слов исключений
Пример:
МОСКОВСКАЯ ОБЛАСТЬ, ОДИНЦОВО -> Московская область, Одинцово
САРАТОВСКАЯ ОБЛАСТЬ, КРАСНОАРМЕЙСКИЙ РАЙОН, САДОВОЕ -> Саратовская область, Красноармейский район, Садовое
ТЮМЕНСКАЯ ОБЛАСТЬ, ХАНТЫ-МАНСИЙСКИЙ-ЮГРА АВТОНОМНЫЙ ОКРУГ -> Тюменская область, Ханты-Мансийский-Югра автономный округ
САХА (ЯКУТИЯ) РЕСПУБЛИКА, ЯКУТСК -> Саха (Якутия) Республика, Якутск
*/
function RussianPost_NormalizeWords($string, $encoding='utf-8') {
	//Слова исключения, они не будут написаны с большой буквы
	$exceptions = array('автономный','автономная','округ','район','область','край','немецкий','национальный');

	$string = mb_strtolower(trim($string), $encoding); //перевод всех букв в нижний регистр
	$word = preg_split('/[\s-]+/', $string, -1, PREG_SPLIT_OFFSET_CAPTURE); //Разделяем строку на отдельные слова (разделители: пробел, тире)

	$resultstring = ''; //Результирующая строка
	for($i=0; $i<count($word); $i++) {

		$substr = $word[$i][0]; //Отдельное слово из строки

		$substr_nothooks = str_replace(array(')','(',',','.'),'',$substr); //Удаляем скобки, запятые, точки (для проверки слова на исключение)
		if(!in_array($substr_nothooks, $exceptions)) { //Если слова нет в исключениях, 
			$offset1 = ($substr[0]=='(') ? 2 : 1; //Смещение первой буквы, нужно для того, чтобы правило применялось к словам в скобках
			$first = mb_substr($substr, 0, $offset1, $encoding); //первая буква
			$rest  = mb_substr($substr, $offset1, mb_strlen($substr, $encoding), $encoding); //все кроме первой буквы 
			$first = mb_strtoupper($first, $encoding); //Переводим первую букву в верхний регистр
			$substr = $first.$rest;
		}

		$splitter = (isset($word[$i+1])) ? substr($string, $word[$i+1][1]-1, 1) : ''; //Определяем разделитель между словами (пробел или тире)
		$resultstring .= $substr.$splitter; //Склеиваем строку из отдельных слов, устанавливаем разделители между словами (пробел или тире)
	}
	return $resultstring; //Возвращаем строку.
}

Спасибо!
Я промазал и поставил вашему комментарию минус вместо плюса. Извините.

Если кто-то это читает, совсем не обязательно всё это преобразование регистра слов делать вручную, как выше в комментарии. Вполне можно использовать штатный mb_convert_case. Например, как здесь.


Кроме того, есть ещё проблема аббревиатур вида ММПО, которые правильно было бы сохранить как есть. Код в комментарии выше этот момент не учитывает.

Подключил свой магазинчик к вам года с полтора назад. Даже чего-то донатил и багтречил помнится :)
Однако все чаще сталкиваюсь с тем, что юзер не знает своего индекса. А вот свой адрес — сюрприз! — знает всегда. То есть назревает вопрос: а можно ли как-то «повернуть процесс вспять»?
Посмотрите в сторону сервисов «Кладр в облаке» и «Дадата», они клёвые. Я на них наткнулся уже после создания этого приложения.
Спасибо, «Дадата» вроде интересные.
Кладр в облаке видел, он годится разве что на побаловаться.
Не скажите, я в своё время адаптировал пример с картой и был весьма доволен, а недавно они сделали и поиск в одно поле, см. примеры. Дадата новее, выглядит интереснее, но я лично ей ещё не пользовался.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории