PHP校验ISBN码的函数代码


Posted in PHP onJanuary 17, 2011

详细资料可以参考:国际标准书号 ? 维基百科,下面还是简述一下什么是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) 
{ 
/* 
* 该函数用于计算ISBN加权和 
* 参数说明: 
* $isbn : isbn码 
* $len : isbn码长度 
*/ 
$sum = 0; 
if ($len == 10) 
{ 
for ($i = 0; $i < $len-1; $i++) 
{ 
$sum = $sum + (int)$isbn[$i] * ($len - $i); 
} 
} 
elseif ($len == 13) 
{ 
for ($i = 0; $i < $len-1; $i++) 
{ 
if ($i % 2 == 0) 
$sum = $sum + (int)$isbn[$i]; 
else 
$sum = $sum + (int)$isbn[$i] * 3; 
} 
} 
return $sum; 
} 
function isbn_compute($isbn, $len) 
{ 
/* 
* 该函数用于计算ISBN末位校验码 
* 参数说明: 
* $isbn : isbn码 
* $len : isbn码长度 
*/ 
if ($len == 10) 
{ 
$digit = 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) 
{ 
$digit = 10 - isbn_sum($isbn, $len) % 10; 
if ($digit == 10) 
$rc = '0'; 
else 
$rc = (string)$digit; 
} 
return $rc; 
} 
function is_isbn($isbn) 
{ 
/* 
* 该函数用于判断是否为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; 
}

函数写好后,就可以直接调用了,下面是调用示例:
<?php echo is_isbn('9787507421781') ? '校验通过' : '校验失败'; ?>

另外我写了一个在线校验ISBN的工具,使用该工具可以在线校验ISBN码的合法性,可以点击以下链接使用:ISBN码在线校验工具
PHP 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
php unset全局变量运用问题的深入解析
Jun 17 PHP
PHP实现读取一个1G的文件大小
Aug 24 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
使用php-timeit估计php函数的执行时间
Sep 06 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
PHP中用正则表达式清除字符串的空白
Jan 17 #PHP
php开发环境配置记录
Jan 14 #PHP
PHP文件读写操作之文件写入代码
Jan 13 #PHP
PHP文件读写操作之文件读取方法详解
Jan 13 #PHP
PHP目录函数实现创建、读取目录教程实例
Jan 13 #PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 #PHP
PHP JSON格式数据交互实例代码详解
Jan 13 #PHP
You might like
用PHP创建PDF中文文档
2006/10/09 PHP
apache配置虚拟主机的方法详解
2013/06/17 PHP
浅谈php提交form表单
2015/07/01 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
[原创]IE view-source 无法查看看源码 JavaScript看网页源码
2009/07/19 Javascript
关于jQuery中的end()使用方法
2011/07/10 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
jquery+ajax+C#实现无刷新操作数据库数据的简单实例
2014/02/08 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
JS定时器用法分析【时钟与菜单中的应用】
2016/12/21 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
基于VUE选择上传图片并页面显示(图片可删除)
2017/05/25 Javascript
微信小程序之页面拦截器的示例代码
2017/09/07 Javascript
基于Vue+elementUI实现动态表单的校验功能(根据条件动态切换校验格式)
2019/04/04 Javascript
小程序如何支持使用 async/await详解
2019/09/12 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
python3实现指定目录下文件sha256及文件大小统计
2019/02/25 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
python打包成so文件过程解析
2019/09/28 Python
python实现npy格式文件转换为txt文件操作
2020/07/01 Python
Python reques接口测试框架实现代码
2020/07/28 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
质检部职责
2013/12/28 职场文书
教师绩效工资方案
2014/02/01 职场文书
银行爱岗敬业演讲稿
2014/05/05 职场文书
贷款担保申请书
2014/05/20 职场文书
食品安全演讲稿
2014/09/01 职场文书
萤火虫之墓观后感
2015/06/05 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
Python何绘制带有背景色块的折线图
2022/04/23 Python