Получение по номеру телефона его местонахождения (страны и города) с использованием Ajax
Номер телефона:
+
По мере набора номера будет отображаться доступная информация об абоненте.
Не вводите цифру 8 в начале номера, которая используется для выхода на межгород.
База содержит информацию о стационарных и мобильных телефонах. Вы получаете оператора и регион по номеру мобильного телефона. Купить базу можно здесь. Описание API здесь.
Здесь будет результат
Система использует общую базу с примером определения города по 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;
}
Дополнительные таблицы, которые нужны этому примеру для определения местонахождения мобильного телефона по номеру мобильного:
lt;?
// список телефонных кодов
// если 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');
?>
Заполненная база данных со всеми таблицами доступна платно.
Вас заинтересует:
- Бесплатное приложение для отслеживания местонахождения.
- Информация о перенесенных телефонных номерах
- API получения местонахождения по номеру телефона: страны и города
.
Прокомментировать/Отблагодарить