我尝试使用 Java 将 ISBN10 代码转换为 ISBN13 数字。从 。在isbn-13.info 上,我找到了转换它们的方法。
示例:0-123456-47-9
- 以“978”前缀开头</li>
- 使用 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);
}
}
对于示例 ISBN10 代码9513218589
(978951321858
没有支票号码的 ISBN13),它返回 5 作为支票号码。如果我使用ISBN 官方网站上的转换器计算它,我得到 4 作为校验和。出于某种原因,新代码中的数字总和比应有的小一。
我已经为此奋斗了很长时间,我相信我已经开始盲目:我只是找不到我做错了什么。有人可以帮忙吗?