AAA Главная
Примеры PHP Примеры JavaScript Примеры Ajax Примеры CSS,HTML

Получение по номеру телефона его местонахождения (страны и города) с использованием Ajax

Номер телефона: +
По мере набора номера будет отображаться доступная информация об абоненте.
Не вводите цифру 8 в начале номера, которая используется для выхода на межгород.

База содержит информацию о стационарных и мобильных телефонах. Вы получаете оператора и регион по номеру мобильного телефона.



Здесь будет результат

Система использует общую базу с примером определения города по ip и выбора страна, регион, город.

Исходный код примера:
<?
/* Определение страна, регион, город по номеру телефона с использованием технологии Ajax
Взято http://htmlweb.ru/ajax/example/telcod.php
Разрешается использование в любых своих разработках.
Размешение кода в открытом доступе разрешается только с сохранением активной ссылки на источник.
Все остальные права принадлежат Колесникову Дмитрию Геннадьевичу.
База доступна платно, по запросу WMID 467585298788 или E-Mail kdg@htmlweb.ru.
Структура базы описана в http://htmlweb.ru/ajax/example/region.php
*/
// открытие базы, аналогично примеру region.php
require_once($_SERVER['DOCUMENT_ROOT'].'/config.php');
define("db_prefix","geo_");
// общие функции с примером region.php
include_once($_SERVER['DOCUMENT_ROOT'].'/ajax/example/region.inc');

if(!isset($_GET['telcod'])){}
elseif(empty($_GET['telcod'])) die('пусто');
else{
    $telcod=addslashes(preg_replace('/[^\d]/','',urldecode($_GET['telcod'])));
   $res = sql('SELECT * FROM '.db_prefix.'country WHERE INSTR("'.$telcod.'",telcod)=1 and LENGTH(telcod)>0');
   while($row = mysqli_fetch_array($res)) { // Казахстан и Россия имеют один код страны
       $country = intval($row['id']);
       $city = substr($telcod, strlen($row['telcod'])); // оставшаяся часть номера телефона
       echo '+<b>' . $row['telcod'] . '</b> страна: ' . $row['name'] . ' (' . $country . ')<br>';
       if (strlen($city) < 3) continue;
       // код города может быть 3,4 или 5 символов
       // т.к. в базе у одного города кодов может быть несколько, введенных через запятую,
       // то использовать простейшее сравнение невозможно. Приходиться "извращаться".
       if (strlen($city) > 4) $res1 = sql('SELECT * FROM ' . db_prefix . 'city WHERE country="' . $country . '" and
            LOCATE(",' . substr($city, 0, 5) . ',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
       if (strlen($city) > 3 && (!isset($res1) || mysqli_num_rows($res1) == 0)) $res1 = sql('SELECT * FROM ' . db_prefix . 'city WHERE country="' . $country . '" and
            LOCATE(",' . substr($city, 0, 4) . ',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
       if (!isset($res1) || mysqli_num_rows($res1) == 0) $res1 = sql('SELECT * FROM ' . db_prefix . 'city WHERE country="' . $country . '" and
            LOCATE(",' . substr($city, 0, 3) . ',", CONCAT(",",telcod,","))>0 and LENGTH(telcod)>0');
       while ($row1 = mysqli_fetch_array($res1)) {
           $city = intval($row1['id']);
           $region = intval($row1['area']);
           echo 'country=(' . $country . ') ' . $row['name'] . ', область=' . $region . ', город=' . $city . '<br>';
       }
       if (mysqli_num_rows($res1) > 1) die;    // пока однозначности в выборе города нет
   }
    if(substr($telcod,0,2)=='79'){ // если это сотовый оператор
        $res1 = sql('SELECT * FROM ' . db_prefix . 'telcod WHERE ' . str_pad($telcod, 10, '0') . ' BETWEEN deffrom and defto');
        while ($row1 = mysqli_fetch_array($res1)) {
            $city = GetName('city', intval($row1['city']));
            $region = GetName('area', intval($row1['okrug']));
            $oper = GetName('oper', intval($row1['oper']));
            echo "<div style='border: #C5D3DC 1px solid; padding: 10px; width: 97%;'>\n";
            if ($city) echo "Город: <b>" . $city . "</b> <a href='http://ru.wikipedia.org/wiki/" . $city . "' target=_blank>Wiki</a><br />\n";
            echo "Регион: <b>" . $region . "</b> <a href='http://ru.wikipedia.org/wiki/" . $region . "' target=_blank>Wiki</a><br />
        Мобильный оператор: <b>" . $oper . "</b><br />
        </div>";
        }
    }
   die;
}
function GetName($tbl, $id){
   $query=sql('SELECT name FROM '.db_prefix.$tbl.' WHERE id="'.$id.'" LIMIT 1');
   if ($data = mysqli_fetch_assoc($query)) return $data['name'];
   return '';
}
?>

<h1>Получение по номеру телефона страны и города с использованием Ajax</h1>
<label>Начальные цифры номера телефона:
+<input value='7495' size=10 onkeyup='Load(this)' /></label><br />
не вводите цифру 8 в начале номера, которая используется для выхода на межгород.

<script>
<!--
var ot="";
function Load(t){
  if(ot==t.value||t.value=="")return; // если ничего не изменилось не "замучить" сервер
  ajaxLoad('info', '/ajax/example/telcod.php?telcod='+t.value, 'загрузка...','','');
  ot=t.value;
}
//-->
</script>

<br /><br />

<div id="info">
</div>

Более сложный вариант скрипта с задержкой на 1 секунду после последнего нажатия клавиши:

var ot="", timer=0;

function Load(t){
   if(ot==t.value||t.value=="")return; // если ничего не изменилось не "замучить" сервер
   ot=t.value;
   if(timer)clearTimeout(timer);
   timer=window.setTimeout('Load2()',1000);  // загружаю через 1 секунду после последнего нажатия клавиши
}

function Load2(){
   ajaxLoad('info', '/ajax/example/telcod.php?telcod='+ot, 'загрузка...','','');
   timer=0;
}

Дополнительные таблицы, которые нужны этому примеру для определения местонахождения мобильного телефона по номеру мобильного:

<?
// список телефонных кодов
// если city пустой, то код для всего региона
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'telcod (
        country CHAR(2) NOT NULL,
        okrug VARCHAR(64) NOT NULL,
        city INT UNSIGNED NOT NULL,
        oper INT UNSIGNED NOT NULL,
        deffrom varchar(11) NOT NULL UNIQUE,
        defto varchar(10) NOT NULL,
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');

// список операторов
sql('CREATE TABLE IF NOT EXISTS '.db_prefix.'oper (
        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
        name VARCHAR(64) UNIQUE NOT NULL,
        mobile TINYINT NOT NULL DEFAULT 0,
        `mnc` INT( 3 ) UNSIGNED NOT NULL DEFAULT 0,
        `brand` VARCHAR(64) NOT NULL DEFAULT "",
        PRIMARY KEY (id)
        ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');
?>

Заполненная база данных со всеми таблицами доступна платно.


.

© Copyright 2008-2019 by KDG



Rambler's Top100