检测图书ISBN编号校检位

原创 2016年08月30日 09:45:05


公司应用要求,扫图书码之后去搜索图书信息,结果无论使用Zbar还是ZXing,都会出来很多稀奇古怪的数字出来,因此需要手工过滤一下无效ISBN号。于是就有了下文:

开车,同学们!请抓好扶手,我们先来了解一下ISBN号是什么:

国际标准书号(International Standard Book Number),简称ISBN,是专门为识别图书等文献而设计的国际编号。ISO于1972年颁布了ISBN国际标准,并在西柏林普鲁士图书馆设立了实施该标准的管理机构---国际ISBN中心。现在,采用ISBN编码系统的出版物有:图书、小册子、缩微出版物、盲文印刷品等。2007年1月1日前,ISBN由10位数字组成,分四个部分:组号(国家、地区、语言的代号),出版者号,书序号和检验码。2007年1月1日起,实行新版ISBN,新版ISBN由13位数字组成,分为5段,即在原来的10位数字前加上3位EAN(欧洲商品编号[1]  )图书产品代码“978”。在联机书目中ISBN可以作为一个检索字段,从而为用户增加了一种检索途径。

第一组号码是国家代码(State Identifier),最短的是一位数字,最长的达五位数字,大体上兼顾文种、国别和地区。把全世界自愿申请参加国际标准书号体系的国家和地区,划分成若干地区,各有固定的编码:美国所出版的书国家代码为0,1代表英语,使用这两个代码的国家有:澳大利亚、加拿大、爱尔兰、新西兰、波多黎各、南非、英国、美国、津巴布韦等;2代表法语,法国、卢森堡以及比利时、加拿大和瑞士的法语区使用该代码;3代表德语,德国、奥地利和瑞士德语区使用该代码;4是日本出版物的代码;5是俄语系国家出版物的代码;7为中国大陆出版物使用的代码等等。国家领域最长可能为5位数字(如不丹为99936),但相对剩下能使用、分配的位数就较为狭隘。组号分为五个档次,长度为1-5位数字。

第二组号码段

第二组号码是出版社代码(Publisher Identifier),由其隶属的国家或地区ISBN中心分配,允许取值范围为2-5位数字。出版社的规模越大,出书越多,其号码就越短。

第三组号码段

第三组号码是书序码(Title Identifier)由出版社自己给出,而且每个出版社的书序号是定长的(数字9,减去组号、出版社代码所占的位数,就是书序码的位数)。最短的一位,最长的六位。出版社的规模越大,出书越多,书序码越长(如人民文学出版社的出版社代码为02,书序码即为6位,译林出版社代码5447,书序码即为4位)。

第四组号码段

第四组号码是校验码,其数值由前九位数字依次以9~1加权之和并以11为模计算得到。
四组数字之间应该用连字符( - )连接(如2-02-033598-0)。但是,有些图书馆集成系统不能自动分配连字符,图书馆编目人员也对ISBN的分段方式不甚了解,所以人们经常在书目记录中省略连字符
---->以上摘自百度百科
敲黑板,划重点了!:
 示范数据:
9 7 8- 7- 8 1 0 9 0- 0 2 1- ?(?标示 校验位)
代码位置:

13 12 11 10 9 8 7 6 5 4 3 2 1 

除位数1外;所有偶数位的数字代码求和

取末位数为a。将a乘以3 取末位数为b。
 
所有奇数位的数字代码求和取末位数为c。

将b和c相加求和 取末位数为d(因模数为10,所以余数即末位数d)。

用10减去d即为校验位数值。
7+7+1+9+0+1 = 25 取末位数为a=5 5*3 = 15 取末位数为b=5 
9+8+8+0+0+2 = 27 取末位数为c=7 5+7 = 12 
取末位数为d=2 (余数)10-2= 8 差数为校验位: 8 

有效的ISBN 是ISBN 978-7-81090-021-8 
上面是我们公司老同事给我的算法,本人凭借自己优秀的数学功底(括弧笑~),稍稍进行了简化,比如 
(x%10)*3%10 等效于 x*3%10
(x%10+y%10)%10 等效 (x+y)%10
等等~
于是自己心动,立马敲代码,得出如下结果



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ISBN编号问题

  • 2013-06-02 19:33
  • 27KB
  • 下载

计蒜客 难题题库 205 图书ISBN号码

102次  13.7%  1000ms  65536K       每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-x...

根据ISBN获取豆瓣API提供的图书信息

/* Description: 获取利用豆瓣API根据ISBN取图书信息. Author: 老蟹 License: GPL v2 book对象利用方法: $book = get_book_dat...

通过豆瓣Api,输入ISBN获取图书信息

在本篇文章中,主要是通过豆瓣API实现获取图书信息的小功能。  一. 豆瓣API能干什么?  参考链接:[url]http://www.douban.com/service/ [/url]  ...

根据isbn获得图书的所有信息

几点说明 1这个豆瓣的api https://api.douban.com/v2/book/isbn/:9787549208869 可以以json的形式返回书籍的所有信息 2最开始的时候是我自己写的...

通过豆瓣Api,输入ISBN获取图书信息

在本篇文章中,主要是通过豆瓣API实现获取图书信息的小功能。  一. 豆瓣API能干什么?  参考链接:[url]http://www.douban.com/service/ [/url]  ...

插件93:根据ISBN获取图书

<?php // Plug-in 93: Get Book From ISBN /* * 根据ISBN获取图书 * 插件说明: * 插件根据提供的10位ISBN书号,在Amazon网站上查找该图书的详...

图书ISBN转换(10转13)

  • 2015-05-26 12:42
  • 40KB
  • 下载

WORD中图、表、公式自动编号及制表位、尾注的应用

一.图表和公式的自动编号2 二.制表位的使用3 三.目录的制作4 四.参考文献的编号和引用5 五.页眉页脚的制作6 六.其他技巧7 分页符(Ctrl+Enter)7 换行符(Shift+...
  • zd0303
  • zd0303
  • 2012-10-11 14:57
  • 3261
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)