ISBN从10到13位的算法

 

     图书的ISBN有两种编码,一种长度是10位的,另一种是13位的。两者其实是可以用特定的算法相互推导的,关键在于最后一位校验码的计算。

 

1. 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 %1 0 = 3。这就是校验位,加在第一步结果的最后。得到13位编码为:9787111165613

 

 

2.从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

 

java代码:

 

	private static String getISBN13(String isbn) {
		if (isbn.length() != 10) {
			return isbn;
		}
		isbn = isbn.substring(0, isbn.length() - 1);
		isbn = "978" + isbn;
		int a = 0;
		int b = 0;
		int c = 0;
		int d = 0;
		for (int i = 0; i < isbn.length(); i++) {
			int x = Integer.parseInt(isbn.substring(i, i+1));
			if (i % 2 == 0) {
				a += x;
			} else {
				b += x;
			}
		}
		c = a + 3 * b;
		d = 10 - c % 10;
		isbn = isbn + d;
		return isbn;
	}

 

附近为java代码

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值