图书ISBN编码10位和13位的换算方法
可任意转载,但必须在醒目位置以超链接形式标明文章原始出处和作者信息
原文地址:http://www.blogkid.net/archives/1865.html
原文地址:http://www.blogkid.net/archives/1865.html
图书的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
计算的方法比较简单。我用ruby做了一个小工具可以方便地计算,可以在这里下载。
用法:
require ‘isbn_format’
a = IsbnFormat.new “711165616″
a.isbn10 #=> “711165616″
a.isbn13 #=> “9787111165613″
构造时的参数可以用10位或13位的isbn,也可以带有横线,比如7-1111-6561-6。有可能会抛出ArgumentError,如果参数的长度不对的话。
October 29th, 2008 by 张磊


你好。google搜索来的。请教一下关于一个isbn的问题。
我现在在用access做一个自己的藏书数据库,在isbn这个问题上因为十位和十三位的问题碰到了麻烦。
在“isbn”这一字段中,我输入的是书上的isbn号码,所以有十位和十三位的。我新建了另外一个“isbn转换”字段,想通过vba或者宏给我自动转换,就是检测一下“isbn”这个字段中的数字如果是十位数的话自动给我转换成十三位然后再“isbn转换”字段中输出。
自己不懂计算机,不知道怎么编写这个vba的代码,请问能指教一下不?或者告诉一下在什么地方能问到怎么编写这个代码呢?
建议按照这个规则自己写一下。如果不会写,可以找人帮帮忙。其实规则很简单