将ISBN10转换为ISBN13

Mik*_*koP 8 java algorithm luhn isbn

我试图用ISBN将ISBN10代码转换为ISBN13数字.来自.在isbn-13.info我找到了转换它们的方法.

示例:0-123456-47-9

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

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

对于示例ISBN10代码9513218589(978951321858没有支票号的ISBN13 ),它返回5作为支票号.如果我使用ISBN官方网站上的转换器计算它,我得到4作为校验和.出于某种原因,新代码中的数字总和比应该的数字少一个.

我已经和它斗争了很长时间,我相信我已经开始失明了:我找不到我做错了什么.有人可以帮忙吗?

Arn*_*pta 5

干得好

    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;
}
Run Code Online (Sandbox Code Playgroud)

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


wol*_*ajr 3

在里面

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

您正在将 ISBN 中的所有数字相加,包括双倍数字。

例子:

数字 7 -> 双精度 = 14

您将总和加上 14。是应该是

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

你应该添加 5。