PHP程序开发示例:国际标准书号ISBN代码验证功能
在编写图书管理程序时,需要验证图书的ISBN代码是否正确。我查了一些资料,查出了这本书的ISBN码的组成。详细信息请参见:国际标准书号-维基百科,我们简单解释一下ISBN代码是什么:
国际标准书号(ISBN;原意读作is-ben),是国际上认可或认可的书籍独立。出版代码(定期出版的期刊除外)。出版商可以通过国际标准书号清楚地识别所有非期刊图书。一个 ISBN 只能有一本或一本出版物与其相对应。如果新版本在原有旧版本的基础上内容没有重大变化,则在出版时不会获得新的ISBN号。当平装本改为精装本时,相应的原ISBN号也必须撤销。
我们通常看到的ISBN码有10位和13位两种。自2007年1月起,10位ISBN已停止使用。目前,新出版图书的ISBN代码均为13位。考虑到严格的图书馆管理方案必须考虑到很多方面,因为仍有许多图书具有10位ISBN代码,因此要验证图书ISBN代码的正确性,必须考虑10位和13位ISBN代码。情况位。从维基百科中,我们可以了解到ISBN码的最后一位是校验码。事实上,如果你想验证ISBN代码的准确性,你应该计算ISBN校验码,看看它是否与最后一位数字匹配。这里所说的验证只是验证该ISBN在构成上是有效的,并不能验证它是否是已出版图书的ISBN。下面是维基百科提供的 ISBN 码验证算法:
校验码计算方法(10 位)
假设国际标准书号的前 9 位数字为:7-309-04547
计算书号的数量重量S:S = 7×10+3×9+0×8+9×7+0×6+4×5+5×4+4×3+7×2 = 226
计算S÷11的余数M:M = 226 mod 11 = 6
计数 11 – M 差异 N:N = 11 ? 6 = 5
如果 N = 10,则校验码为字母“X”
如果 N = 11,则校验码为数字“0”
如果 N 为其他数字,则校验码为数字N
所以,这本书的评论代码是5;如果用户提供的ISBN码是7-309-04547-6,那么验证失败
如何计算校验码(13位)
假设ISBN号的前12位是:978- 986-181-728
计算权重之和S:S = (9×1)+(7×3)+(8×1)+(9×3)+(8×1)+(6×3)+(1×1) + ( 8×3)+(1×1)+(7×3)+(2×1)+(8×3) = 164
计算 S÷10 的余数 M:M = 164 mod 10 = 4
计算 10 – M 的差值 N:N = 10 ? 4 = 6
如果N = 10,则校验码为数字“0”
如果N为其他数字,则校验码为数字N
因此,本书的校验码为6。完整的国际标准书号 ISBN 978-986-181-728-6
好的,这是背景知识。下面是我写的ISBN码验证函数(php版)。有需要的可以直接使用:
function isbn_sum($isbn, $len)
{
/*
* 该函数用于计算 ISBN 权重的金额
* 参数说明:
* $isbn * $ len : 长度 isbn 代码
*/
$sum = 0;
if ($len == 10)
{
for ($i = 0; $i len- 1; $ i++)
{
$sum = $sum + (int)$isbn[$i] * ($len - $i);
}
} ($len == 13 )
{
for ($i = 0; $i {
if ($i % 2 == 0)
$sum = $sum + (int)$isbn[$i];
else
$sum = $sum + (int)$isbn[$i] * 3;
} }
返回$sum;
}
function isbn_compute($isbn, $len)
{
/* 用于检查最后一个 * IS * 参数说明:
* $isbn : isbn 代码
* $len : isbn 代码
的长度 */
if ($len == 10) { 11 - isbn_sum($isbn, $len) % 11 ;
if ($digit == 10)
$rc = 'X';
else if ($digit == 11)
$rc = '0';
else
$rc = (string )$digit;
}
else if($len == 13)
{ = 1 $0 isbn_sum( $isbn, $len) % 10;
if ($digit == 10)
$rc = '0';
else
$rc = (字符串)$digit;
}
返回 $rc;} function is_isbn($isbn)
{
/*
* 该函数用于判断是否为 ISBN 号 该函数用于判断是否为 * /
$len = strlen ($isbn);
if ($len!=10 && $len!=13)
return 0;
$rc = isbn_compute($isbn, $len) ;
if ($isbn) [$len-1] != $rc) /* ISBN 尾数与计算出的校验码不匹配*/ return 0;
else
return 1 ;
}
一旦函数写好了,可以直接调用。这是一个示例调用:
原文:http://www.ludou.org/php-check-isbn.html
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。