PHP校验ISBN码的函数代码

竹里
竹里
发布时间:2026-10-15 | 2人浏览过
原创

本文介绍如何在PHP中编写ISBN码校验函数,支持国际通用的ISBN-10和ISBN-13两种格式。通过计算加权和分析,自动验证图书编号的结构合法性,适用于图书管理系统的数据清洗。

ISBN码基础知识

国际标准书号(ISBN)是用于唯一标识非期刊类出版物的代码体系。目前主要存在两种格式:

  • ISBN-10:共10位,自2007年起新出版的图书不再使用该格式,但存量书籍仍广泛存在。
  • ISBN-13:共13位,目前的新版图书均采用此标准,通常以前缀978或979开头。

ISBN码的最后几位为校验码(Check Digit),其数值由前面所有数字按照特定权重规则计算得出。如果输入的ISBN不符合该计算结果,则说明编码存在录入错误或无效。

准备条件与依赖

实现ISBN校验无需安装任何外部扩展库,仅依赖PHP基础语法即可运行。在编写代码前,请确保您的开发环境已配置好PHP运行解释器。

真实操作顺序:编写ISBN校验函数

第1步:构建加权和计算逻辑

不同长度的ISBN采用不同的乘法权重。我们需要一个辅助函数来计算除去校验位之前的总和。

复制代码 代码如下:
function isbn_sum($isbn, $len) {
    /*
    * 该函数用于计算ISBN加权和
    * 参数说明:
    * $isbn : isbn码字符串
    * $len : isbn码长度 (10或13)
    */
    $sum = 0;
    if ($len == 10) {
        // ISBN-10规则:第i位乘以 (10-i)
        for ($i = 0; $i < $len - 1; $i++) {
            $sum = $sum + (int)$isbn[$i] * ($len - $i);
        }
    } elseif ($len == 13) {
        // ISBN-13规则:奇数位权重1,偶数位权重3
        for ($i = 0; $i < $len - 1; $i++) {
            if ($i % 2 == 0) { // 索引从0开始,偶数索引即第1、3...位
                $sum = $sum + (int)$isbn[$i];
            } else {
                $sum = $sum + (int)$isbn[$i] * 3;
            }
        }
    }
    return $sum;
}

第2步:生成理论校验码

根据上一步得到的总和,通过取模运算得出最后一位应该是多少。此处需特别处理ISBN-10中的特殊情况(余数为10时校验码为'X')。

复制代码 代码如下:
function isbn_compute($isbn, $len) {
    /*
    * 该函数用于计算ISBN末位校验码
    * 参数说明:
    * $isbn : isbn码字符串
    * $len : isbn码长度
    */
    if ($len == 10) {
        // 10位ISBN:(11 - sum%11)%11,结果为10映射为'X'
        $digit = 11 - isbn_sum($isbn, $len) % 11;
        if ($digit == 10)
            $rc = 'X';
        else if ($digit == 11) // 相当于取模后整除的情况,修正为0
            $rc = '0';
        else
            $rc = (string)$digit;
    } else if ($len == 13) {
        // 13位ISBN:10 - sum%10,结果为10映射为'0'
        $digit = 10 - isbn_sum($isbn, $len) % 10;
        if ($digit == 10)
            $rc = '0';
        else
            $rc = (string)$digit;
    }
    return $rc;
}

第3步:整合入口并执行校验

将上述逻辑封装为一个统一的入口函数 is_isbn(),负责检查长度是否合规,并对比用户提供的尾数与计算出的理论尾数。

复制代码 代码如下:
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表