isISBN function
check if the string is an ISBN (version 10 or 13)
Implementation
bool isISBN(String? str, {ISBNVersion version = ISBNVersion.any}) {
if (version == ISBNVersion.any) {
return isISBN(str, version: ISBNVersion.isbn10) ||
isISBN(str, version: ISBNVersion.isbn13);
}
final sanitized = str!.replaceAll(RegExp(r'[\s-]+'), '');
var checksum = 0;
if (version == ISBNVersion.isbn10) {
if (!_isbn10Maybe.hasMatch(sanitized)) {
return false;
}
for (var i = 0; i < 9; i++) {
checksum += (i + 1) * int.parse(sanitized[i]);
}
if (sanitized[9] == 'X') {
checksum += 10 * 10;
} else {
checksum += 10 * int.parse(sanitized[9]);
}
return checksum % 11 == 0;
} else if (version == ISBNVersion.isbn13) {
if (!_isbn13Maybe.hasMatch(sanitized)) {
return false;
}
final factor = [1, 3];
for (var i = 0; i < 12; i++) {
checksum += factor[i % 2] * int.parse(sanitized[i]);
}
return int.parse(sanitized[12]) - ((10 - (checksum % 10)) % 10) == 0;
}
return false;
}