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

PHP 驗證 ISBN 號碼合法性函數

     編輯:PHP 相關知識

功能說明

檢查使用者輸入的 ISBN-10 號碼(可含連字號、空格)是否符合校驗碼規則。支援 X 代表 10 的檢查碼。

原始碼

<?php
/**
 * 驗證 ISBN-10 合法性
 * @param string $isbn 輸入字串(可含連字號、空格)
 * @return bool true=合法, false=不合法
 */
function checkisbn($isbn) {
    // 1. 移除非數字與 X 字元
    $isbn10 = ereg_replace("[^0-9X]", "", $isbn);

    // 2. 依 ISBN-10 演算法計算檢查碼
    // 權重 10~2 對應前 9 位數字
    $sum = 0;
    for ($i = 0; $i < 9; $i++) {
        $sum += (10 - $i) * intval($isbn10[$i]);
    }
    $checkdigit = 11 - ($sum % 11);

    // 3. 處理特殊值
    if ($checkdigit == 10) $checkdigit = 'X';
    if ($checkdigit == 11) $checkdigit = 0;

    // 4. 比對第 10 位
    return ($checkdigit == $isbn10[9]);
}
?>

演算法詳解

  1. 淨化輸入:只保留 0-9 與 X(大小寫不敏感,建議先 strtoupper())。
  2. 加權加總:第 1 位 ×10、第 2 位 ×9 … 第 9 位 ×2。
  3. 模 11 取餘:11 - (sum % 11) 得到檢查碼(0-10)。
  4. 特殊編碼:10 → X,11 → 0。
  5. 比對:與第 10 字元比較。

使用範例

$tests = array(
    '0-306-40615-2',      // 合法
    '7-301-12345-6',      // 不合法
    'ISBN 0-306-40615-2', // 含前綴也可
    '030640615X'          // 以 X 結尾
);
foreach ($tests as $isbn) {
    echo $isbn . ' => ' . (checkisbn($isbn) ? '✓' : '✗') . "\n";
}

注意事項

  • 僅支援 ISBN-10(13 碼 ISBN-13 需另行實作)。
  • 原碼使用已棄用 ereg_replace,現代 PHP 建議改用 preg_replace。
  • 未檢查長度是否恰好 10 碼,實際部署前建議加入 strlen($isbn10) === 10 判斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved