首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 手機號歸屬地查詢:API 與本地庫雙方案

     編輯:PHP 相關知識

兩種主流實現方式對比

手機號歸屬地查詢常見於註冊驗證、風控分析、營銷精準投放等場景。本文提供第三方 API 調用與本地數據庫查詢兩套完整方案。

方案一:第三方 API 調用(以 WebXml 為例)

優點:無需維護數據、實時準確;缺點:依賴外網、有頻率限制、需開啟 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 為備」的混合策略,兼顧性能與準確度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved