background image

PHP 函数之校验 ISBN 码

最近在编写一个图书管理程序的时候,需要校验图书 ISBN 码正确性,查

了一些资料,了解了图书 ISBN 码的构成,详细资料可以参考:国际标准书号 
– 维基百科,下面还是简述一下什么是 ISBN 码:

国际标准书号(International Standard Book Number,ISBN;拟发

音 is-ben),是国际通用的图书或独立的出版物(除定期出版的期刊)代码。
出版社可以通过国际标准书号清晰的辨认所有非期刊书籍。一个国际标准书号
只有一个或一份相应的出版物与之对应。新版本如果在原来旧版的基础上没有
内容上太大的变动,在出版时也不会得到新的国际标准书号码。当平装本改为
精装本出版时,原来相应的国际标准书号号码也应当收回。

平常我们能够见到的 ISBN 码有 10 位和 13 位两种,其中 10 位的 ISBN

自 2007 年 1 月起已经停止使用,目前新出版的图书 ISBN 码都是 13 位。考虑
到一个严谨的图书管理程序要考虑到多方面的问题,因为 10 位 ISBN 码的图
书还是有巨大的存世量的,所以要校验图书 ISBN 码的正确性,就必须同时考
虑 10 位和 13 位的情况。从维基百科可以了解到 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 码)
假设某国际标准书号号码前 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)
{
/*