首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将ISBN10转换为ISBN13

将ISBN10转换为ISBN13
EN

Stack Overflow用户
提问于 2013-06-14 12:35:13
回答 4查看 3.3K关注 0票数 8

我尝试用Java将ISBN10代码转换为ISBN13数字。从。在isbn-13.info上,我找到了转换它们的方法。

例子: 0-123456-47-9

  • 以“978”开头
  • 使用ISBN的前九个数字字符(包括破折号) 978-0-123456-47-
  • 使用“Mod 10算法”978-0-123456-47-2计算EAN校验数字。

使用它,我创建了一个Java程序来进行转换。

代码语言:javascript
复制
public class ISBNConverter {
    public static void main(String[] args) {
        String isbn10 = "9513218589";
        String isbn13 = "";
        int sum = 0;
        int checkNumber = 0;
        int multiplier = 2;

        String code = "978" + isbn10.substring(0, isbn10.length() - 1);

        for(int i = code.length() - 1; i >= 0; i--) {
            int num = Character.getNumericValue(code.charAt(i));
            isbn13 += String.valueOf(num * multiplier);

            multiplier = (multiplier == 2) ? 1 : 2;
        }

        for(int i = 0; i < isbn13.length(); i++) {
            sum += Character.getNumericValue(isbn13.charAt(i));
        }

        while(sum % 10 != 0) {
            sum++;
            checkNumber++;
        }

        System.out.println(checkNumber);
    }
}

例如,ISBN10代码9513218589 (没有复选号的978951321858 ISBN13 ),它返回5作为检查号。如果我用ISBN官方网站上的转换器计算它,我得到4作为校验和。由于某些原因,新代码中的数字之和比应该的少一个。

我与此斗争了很长时间,我相信我已经开始盲目:我只是找不到我做错了什么。有人能帮忙吗?

EN

回答 4

Stack Overflow用户

发布于 2015-04-05 08:01:38

这就是你要的

代码语言:javascript
复制
    public static String ISBN10toISBN13( String ISBN10 ) {
    String ISBN13  = ISBN10;
    ISBN13 = "978" + ISBN13.substring(0,9);
    //if (LOG_D) Log.d(TAG, "ISBN13 without sum" + ISBN13);
    int d;

    int sum = 0;
    for (int i = 0; i < ISBN13.length(); i++) {
        d = ((i % 2 == 0) ? 1 : 3);
        sum += ((((int) ISBN13.charAt(i)) - 48) * d);
        //if (LOG_D) Log.d(TAG, "adding " + ISBN13.charAt(i) + "x" + d + "=" + ((((int) ISBN13.charAt(i)) - 48) * d));
    }
    sum = 10 - (sum % 10);
    ISBN13 += sum;

    return ISBN13;
}

请原谅之间的日志行,我正在复制从我正在处理的android项目粘贴它。

票数 6
EN

Stack Overflow用户

发布于 2013-06-14 12:59:37

对于(int= 0;i

你把ISBN的所有数字加起来,包括双倍的数字。

示例:

数字7 -> double = 14

你要把14加进去。是应该是

数字7 ->双= 14 ->大于9?是的,所以1+4 =5

你应该加5。

票数 3
EN

Stack Overflow用户

发布于 2020-09-23 22:20:26

您可以使用库为您完成这一任务。请参阅ISBNValidator::转换13方法。

代码语言:javascript
复制
import org.apache.commons.validator.routines.ISBNValidator;

String isbn13 = ISBNValidator.getInstance().convertToISBN13("9513218589");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17108621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档