in RegularExpressionAnnotator/src/main/java/org/apache/uima/annotator/regex/extension/impl/ISBNNumberValidator.java [35:97]
public boolean validate(String coveredText, String ruleID) throws Exception {
// cleanup '-' signs from the covered text to check the isbn number
coveredText = coveredText.replaceAll("-", "");
// get character array for ISBN number digits
char[] isbnCharArray = coveredText.toCharArray();
// check if we have a ISBN-10 or ISBN-13
if (coveredText.length() == 10) {
// covert ISBN number digits to integer array
int[] isbnDigits = new int[9];
for (int i = 0; i < 9; i++) {
isbnDigits[i] = Character.digit(isbnCharArray[i], 10);
}
// calculate ISBN-10 check digit
int checkDigit = 11 - (10 * isbnDigits[0] + 9 * isbnDigits[1] + 8
* isbnDigits[2] + 7 * isbnDigits[3] + 6 * isbnDigits[4] + 5
* isbnDigits[5] + 4 * isbnDigits[6] + 3 * isbnDigits[7] + 2 * isbnDigits[8]) % 11;
// check if ISBN number if it is a real ISBN number
if (checkDigit == 10) {
if (isbnCharArray[9] == 'X' || isbnCharArray[9] == 'x') {
// real ISBN number
return true;
}
} else if (Character.digit(isbnCharArray[9], 10) == checkDigit) {
// real ISBN number
return true;
} else if (checkDigit == 11) {
// normally this is an invalid ISBN number but they are still
// available so we decided they are valid
return true;
}
} else if (coveredText.length() == 13) {
// covert ISBN number digits to integer array
int[] isbnDigits = new int[12];
for (int i = 0; i < 12; i++) {
isbnDigits[i] = Character.digit(isbnCharArray[i], 10);
}
// calculate ISBN-13 check digit
int checkDigit = 10 - (isbnDigits[0] + 3 * isbnDigits[1]
+ isbnDigits[2] + 3 * isbnDigits[3] + isbnDigits[4] + 3
* isbnDigits[5] + isbnDigits[6] + 3 * isbnDigits[7]
+ isbnDigits[8] + 3 * isbnDigits[9] + isbnDigits[10] + 3 * isbnDigits[11]) % 10;
// check if ISBN number if it is a real ISBN number
if (checkDigit == 10) {
if (Character.digit(isbnCharArray[12], 10) == 0) {
// real ISBN number
return true;
}
} else if (Character.digit(isbnCharArray[12], 10) == checkDigit) {
// real ISBN number
return true;
}
}
return false;
}