手機號歸屬地查詢常見於註冊驗證、風控分析、營銷精準投放等場景。本文提供第三方 API 調用與本地數據庫查詢兩套完整方案。
優點:無需維護數據、實時準確;缺點:依賴外網、有頻率限制、需開啟 cURL 擴展。
<?php
header("Content-Type: text/html; charset=utf-8");
if (isset($_GET['number'])) {
$url = 'https://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo';
$number = $_GET['number'];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => "mobileCode=$number&userId=",
CURLOPT_RETURNTRANSFER => true,
]);
$data = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($data);
if (strpos($xml, 'https://') !== false) {
echo '手機號碼格式錯誤!';
} else {
echo $xml;
}
}
?>
<form method="get">
手機號:<input name="number"> <input type="submit" value="查詢">
</form>
環境配置:Windows 修改 php.ini 啟用 extension=php_curl.dll;Linux 編譯時加入 --with-curl。
核心思路:按號段(前 3/7 位)建立索引文件,查詢時定位文件再按行讀取。
<?php
// function.php 核心函數
session_start();
$dbPath = "xiaolin/"; // 數據目錄,每個前綴一個文件
function getPhoneInfo($phone) {
global $dbPath;
if (strlen($phone) < 7 || !ctype_digit($phone)) return "號碼格式錯誤";
$prefix = substr($phone, 0, 3);
$suffix = ltrim(substr($phone, 3, 4), '0'); // 中間 4 位作索引
if (!in_array($prefix, array_diff(scandir($dbPath), ['.', '..']))) {
return "暫不支持該號段:$prefix";
}
$lines = file($dbPath . $prefix);
$line = $lines[$suffix] ?? '';
if (!$line) return "無數據";
return substr($line, strpos($line, '=') + 1, -1); // 去換行符
}
// 更新數據示例
function updatePhoneInfo($phone, $info) {
global $dbPath;
$prefix = substr($phone, 0, 3);
$suffix = ltrim(substr($phone, 3, 4), '0');
$lines = file($dbPath . $prefix);
$lines[$suffix] = "$suffix=$info\n";
file_put_contents($dbPath . $prefix . '1', implode('', $lines));
rename($dbPath . $prefix . '1', $dbPath . $prefix); // 原子替換
}
?>
<form method="post" action="?action=search">
手機號:<input name="phone"> <input type="submit" value="查詢歸屬地">
</form>
<?php
if ($_GET['action'] ?? '' === 'search') {
require 'function.php';
$phone = $_POST['phone'] ?? die('請輸入號碼');
echo "號碼 $phone 歸屬:" . getPhoneInfo($phone) . "";
}
?>
| 維度 | 第三方 API | 本地數據庫 |
|---|---|---|
| 實時性 | 高 | 需定期更新 |
| 併發能力 | 受限於對方 QPS | 極高(本地 IO) |
| 維護成本 | 低 | 需定期導入數據 |
| 隱私合規 | 數據外傳 | 完全可控 |
生產環境常採用「本地庫為主、API 為備」的混合策略,兼顧性能與準確度。