PHP校验ISBN码的函数代码
本文介绍如何在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(),负责检查长度是否合规,并对比用户提供的尾数与计算出的理论尾数。
复制代码 代码如下:
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













