Более полная стоит 50$.
но всеже, мож кому пригодиться
function geo_ip($IP)
{
// проверяем формат переменной
if(preg_match("#^([0-9]{0,3})\.([0-9]{0,3})\.([0-9]{0,3})\.([0-9]{0,3})$#",$IP))
{
// преобразовываем IP в число необходимым способом
list($w,$x,$y,$z)=explode(".",$IP);
$ip_num = 16777216*$w + 65536*$x + 256*$y + $z;
// ищем соответствие
$sql=mysql_query("SELECT * FROM Geo WHERE {$ip_num} >=ip_start_num AND {$ip_num} <= ip_end_num LIMIT 1");
$row=mysql_fetch_assoc($sql);
//возвращаем результат
return $row;
}
return false;
}