База содержит информацию о стационарных и мобильных телефонах. Вы получаете оператора и регион по номеру мобильного телефона.
Система использует общую базу с примером определения города по ip и выбора страна, регион, город.
<?php
/* Определение страна, регион, город по номеру телефона с использованием технологии 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($_GET['telcod']);
$res = sql('SELECT * FROM '.db_prefix.'country WHERE INSTR("'.$telcod.'",telcod)=1 and LENGTH(telcod)>0');
while($row = mysql_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) || mysql_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) || mysql_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 = mysql_fetch_array($res1)){
$city=intval($row1['id']);
$region=intval($row1['area']);
echo 'country=('.$country.') '.$row['name'].', область='.$region.', город='.$city.'<br>';
}
if(mysql_num_rows($res1)>1)die; // пока однозначности в выборе города нет
}
if(substr($telcod,0,2)=='79'){ // если это сотовый оператор
$res1 = sql('SELECT * FROM '.db_prefix.'telcod WHERE def="'.substr($city,0,3).'" and '.intval(str_pad(substr($city,3),7,'0')).' BETWEEN deffrom and defto');
while($row1 = mysql_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 = mysql_fetch_assoc($query)) return $data['name'];
return '';
}
?>
<h1>Получение по номеру телефона страны и города с использованием Ajax</h1>
Начальные цифры номера телефона:
+<input value='7495' size=10 onkeyup='Load(this)' /><br />
не вводите цифру 8 в начале номера, которая используется для выхода на межгород.
<script LANGUAGE="JavaScript">
<!--
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 (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
okrug VARCHAR(64) NOT NULL,
city INT UNSIGNED NOT NULL,
oper INT UNSIGNED NOT NULL,
def CHAR(3) NOT NULL,
deffrom INT UNSIGNED NOT NULL,
defto INT UNSIGNED NOT NULL,
PRIMARY KEY (id),
UNIQUE (def, deffrom)
) 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,
PRIMARY KEY (id)
) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin');
Заполненная база данных со всеми таблицами доступна платно.
© Copyright 2008-2012 by KDG