图书的ISBN有两种编码,一种长度是10位的,另一种是13位的。两者其实是可以用特定的算法相互推导的,关键在于最后一位校验码的计算。
先说10位计算到13位,10位的isbn编号是7111165616,转化到13位,遵循下面的算法:
去掉最后一位,在最前面加上978,变成978711116561
从第一个数字起,求每奇数位的和,记为a。9+8+1+1+6+6 = 31
从第二个数字起,求每偶数位的和,记为b。7+7+1+1+5+1 = 22
求a+3b,记为c。c = 97
求10-c并对结果取10的模,(10-c)%10 = 3。这就是校验位,加在第一步结果的最后。得到13位编码为:9787111165613
从13位到10位的计算方法更简单。13位编号是9787111165613,现在想把它转化为10位,可以这样做:
去掉开头的”978″和最后一位校验码,变成711116561
从第一位开始,将每一位和10到2的数字相乘,并求和;7*10 + 1*9 + 1* 8 + 1*7 + 1*6 + 6*5 + 5*4 + 6*3 + 1*2 = 170;记为c
求11-c并对结果取11的模:(11-c)%11 = 6;如果结果是10就记为X,然后把算出来的一位加到第一步结果的最后,得到10位编码为:7111165616
class IsbnFormat
def initialize(isbn)
@isbn = isbn.sub("-", "")
if(@isbn.length == 10)
@isbn = @isbn[0..8]
elsif(@isbn.length == 13)
@isbn = @isbn[3..11]
else
raise ArgumentError, "Bad ISBN"
end
end
def isbn10
a = 11
b = 0
@isbn.length.times { |i|
b += (a -= 1)*(@isbn[i] - 48)
}
((11 - b)%11) == 10 ? @isbn + "X" : @isbn + (11 - (b % 11)).to_s
end
def isbn13
temp = "978" + @isbn
sum = 0
i = 0
temp.length.times{ |i|
if(i % 2 == 0)
sum += temp[i] - 48
else
sum += 3 * (temp[i] - 48)
end
}
temp + ((10 - sum) % 10).to_s
end
end
我们可以这样来用它:
require 'isbn_format'
isbn = IsbnFormat.new '7111165616'
isbn.isbn10 #=> 7111165616
isbn.isbn13 #=> 9787111165613
参数可以用10位或13位的isbn,也可以带有横线,如7-1111-6561-6。如果参数的长度不对的话,有可能会抛出ArgumentError。
分享到:
相关推荐
本篇文章将详细介绍10位和13位ISBN的结构、转换方法以及如何使用“10位13位ISBN转换工具”进行转换。 ### 10位ISBN的构成 10位ISBN由五部分组成,每部分之间通常用破折号分隔: 1. **组区号**:代表出版物的地理或...
在这个项目中,我们关注的是C#编程语言中对这些编码进行转换的实现,特别是在9位、10位和13位ISBN之间的互换。以下是对这个主题的详细讲解: 首先,我们需要理解什么是ISBN。ISBN是International Standard Book ...
在图书行业中,国际标准书号(International Standard Book Number,简称ISBN)是用于唯一标识书籍的标准编码。ISBN系统自1970年起使用,随着时间的发展,它经历了从10位到13位的演变,以应对数量不断增长的出版物。...
10位的ISBN主要用于1970年至2006年间的书籍,而13位的ISBN则从2007年开始逐渐取代10位,以适应更广泛的编码需求和EAN(欧洲商品条码)系统。 1. **ISBN-10到ISBN-13的转换**: - ISBN-10由10个数字组成,通常以一...
例如,"Unit1.pas"可能包含了处理ISBN和图书编码转换的函数或过程,而"Project2.dpr"是项目的主文件,定义了项目的整体结构。通过这些源码,开发者可以更深入地理解ISBN算法的实现细节,包括数据结构、输入输出处理...
图书条形码则是将ISBN编码转化为机器可读的形式,使得书店、图书馆等机构可以快速准确地进行书籍的库存管理与销售。本文将深入探讨ISBN的构成、含义、转换算法以及与条形码的关系。 1. ISBN的构成 一个完整的ISBN由...
信源编码是将原始信息转换为适合传输的形式的过程。第二章可能涉及无损编码和有损编码的区别。无损编码如哈夫曼编码(Huffman Coding)和游程编码(Run-Length Encoding),能完全恢复原始信息;有损编码如JPEG图像...
ISBN是一种在全球范围内唯一标识图书等出版物的编码系统,分为10位和13位两种形式。ISBN-10由10个数字组成,通常以978或979开头,最后一位是校验码,通过特定算法计算得出,确保整个号码的正确性。而ISBN-13是13位的...
综上所述,这个Delphi项目是一个用于ISBN和图书编码转换的程序,具有快速处理能力。通过解压并运行这个项目,我们可以查看和学习如何在Delphi环境中实现这种转换算法,这对于Delphi开发者或对图书管理软件感兴趣的...
- **标准型Code93条形码**:包含46个字符,相比于Code39增加了4个特殊字符,用于转换到完整的ASCII字符集。 - **完全型Code93条形码**:包含128个字符,编码能力与Code128相当。 #### 14. Code11条形码 Code11条形...
它通过一系列黑白相间的条纹,将数据编码为可被机器快速读取的形式。在这个特定的项目中,我们关注的是ISBN(国际标准书号)条形码的识别,这是一种专门用于图书的标准条形码。"ISBN条形码识别源码"是一个C++编程...
13位ISBN是在2007年全面实施的,以扩展编码能力并容纳更多的出版物。 10位ISBN的格式通常为:X-999-99999-X,其中X代表一个校验码,可以是0-9或X(X表示10)。而13位ISBN的格式则为:978-99999-999-9,同样,最后一...
13位ISBN是在10位基础上通过特定算法转换得到的,以适应更广泛的编码需求。 转换规则如下: 1. 如果原10位ISBN以X结尾,那么X代表数字10。 2. 将10位ISBN的每一位数字乘以其权重(1、3、1、3、1、3、1、3、1),...
### 10、13位条码转换为ISBN的知识点详解 #### 一、概述 在图书出版领域,ISBN(International Standard Book Number)国际标准书号是一种唯一标识图书的国际通用代码,它由一系列数字组成,用以识别图书的出版商...
3. **C语言实现**:在C语言中,可以定义一个函数,如`int calculate_ISBN_checksum(char* isbn)`,接收一个表示ISBN的字符串,然后逐个字符处理,将其转换为整数并进行加权求和。最后根据求和结果计算校验位。 4. *...
2. **标签采购与编码**:购买符合标准的RFID图书标签,并根据图书信息进行个性化编码。 3. **标签安装**:将RFID标签安全地贴在每本书上,位置要确保不影响阅读且能有效读取。 4. **系统集成**:将新的RFID系统与...
每本书都有一个唯一的ISBN,它被转换为EAN13格式以便于条形码系统识别。通常,ISBN的10位数字前面会加上“978”或“979”作为前缀,再加上一个校验位,形成13位的EAN13条形码。 总结来说,EAN13和EAN8条形码是商品...
**ISBNlib_bnf** 是Python的一个开源库,它提供了一系列工具,帮助开发者验证、转换和操作与法国国家图书馆(BNF)相关的ISBN编码。BNF是法国的国家级图书馆,负责分配和管理法国出版物的ISBN。这个库特别适用于处理...
3. **转换ISBN**:在ISBN-10和ISBN-13之间进行转换,以适应不同的需求。 4. **生成ISBN**:可能包括创建新的随机或基于特定规则的ISBN,以用于测试或其他目的。 5. **比较ISBN**:提供比较两个ISBN是否相同或相关的...
4. **解码和编码**:`isbnlib.decode()`和`isbnlib.encode()`函数可以帮助将ISBN从人类可读的形式转换为机器友好的形式,反之亦然。 5. **获取书名和出版商**:通过`isbnlib.meta()`,开发者可以尝试从ISBN获取书籍...