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

PHP 手機號碼驗證與歸屬地查詢:正則規則與淘寶 API 實作

     編輯:PHP 相關知識

前言

表單驗證手機號碼格式並查詢歸屬地是常見需求。本文提供 PHP 正則驗證函數 (支援最新號段) 及呼叫淘寶公開 API 查詢歸屬地的完整實作。

手機號碼格式驗證

function checkMobileValidity(string $mobile): bool {
    // 支援 13/14/15/16/17/18/19 開頭,共 11 位數字
    $pattern = '/^1[3-9]\d{9}$/';
    return (bool)preg_match($pattern, $mobile);
}

// 測試
var_dump(checkMobileValidity('13800138000')); // true
var_dump(checkMobileValidity('12345678901')); // false

正則說明:^1[3-9]\d{9}$ 涵蓋所有現行中國大陸手機號段 (13-19 開頭),長度固定 11 碼。比舊版分段列舉更簡潔好維護。

歸屬地查詢 (淘寶 API)

function checkMobilePlace(string $mobile): string {
    $url = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel={$mobile}&t=" . time();
    $content = @file_get_contents($url);
    if (!$content) return "查詢失敗";

    // 回應格式: __GetZoneResult_ = { ... province:'浙江', catName:'中国移动', ... }
    // 簡易解析
    preg_match("/province:'([^']+)'/", $content, $mProv);
    preg_match("/catName:'([^']+)'/", $content, $mCat);
    $province = $mProv[1] ?? '未知';
    $carrier  = $mCat[1] ?? '未知';

    return "{$province} {$carrier}";
}

// 使用
echo checkMobilePlace('13800138000'); // 輸出: 浙江 中国移动

注意事項與優化

  1. API 穩定性:淘寶此非官方公開 API,隨時可能變更或限流。生產環境建議改用付費號段資料庫 (如 ip2region 手機號版) 或三大運營商官方介面。
  2. 編碼處理:API 回傳 GBK/UTF-8 混雜,若出現亂碼請用 mb_convert_encoding($content, 'UTF-8', 'GBK')。
  3. 快取機制:同一號碼段重複查詢極多,建議以 Redis/Memcached 快取 30 天,鍵名 mobile_place:{prefix} (前 7 碼)。
  4. 錯誤處理:網路超時、API 回傳異常時返回預設值,避免阻塞主流程。
  5. 隱私合規:僅查詢歸屬地不涉及用戶隱私,但仍需在隱私政策說明。

進階:離線號段資料庫

下載最新 mobile_area.csv (格式: 號段,省份,城市,運營商),匯入 MySQL/Redis:

CREATE TABLE mobile_prefix (
    prefix CHAR(7) PRIMARY KEY,
    province VARCHAR(20),
    city VARCHAR(20),
    carrier VARCHAR(20)
);
-- 查詢
SELECT province, carrier FROM mobile_prefix WHERE prefix = LEFT($mobile, 7);

離線查詢零延遲、無外部依賴,適合高併發場景。

總結

手機號驗證採用簡潔正則 /^1[3-9]\d{9}$/ 即可覆蓋全號段。歸屬地查詢開發期可用淘寶 API 快速驗證,正式上線強烈建議部署離線號段庫,確保高可用與資料主權。

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