39 lines
1.0 KiB
Java
39 lines
1.0 KiB
Java
public static void main(String[] args) {
|
|
String[] isbn13s = {
|
|
"978-0596528126",
|
|
"978-0596528120",
|
|
"978-1788399081",
|
|
"978-1788399083"
|
|
};
|
|
for (String isbn13 : isbn13s)
|
|
System.out.printf("%s %b%n", isbn13, validateISBN13(isbn13));
|
|
}
|
|
|
|
static boolean validateISBN13(String string) {
|
|
int[] digits = digits(string.strip().replace("-", ""));
|
|
return digits[12] == checksum(digits);
|
|
}
|
|
|
|
static int[] digits(String string) {
|
|
int[] digits = new int[13];
|
|
int index = 0;
|
|
for (char character : string.toCharArray()) {
|
|
if (character < '0' || character > '9')
|
|
throw new IllegalArgumentException("Invalid ISBN-13");
|
|
/* convert ascii to integer */
|
|
digits[index++] = Character.digit(character, 10);
|
|
}
|
|
return digits;
|
|
}
|
|
|
|
static int checksum(int[] digits) {
|
|
int total = 0;
|
|
int index = 0;
|
|
for (int digit : digits) {
|
|
if (index == 12) break;
|
|
if (index++ % 2 == 1) digit *= 3;
|
|
total += digit;
|
|
}
|
|
return 10 - (total % 10);
|
|
}
|