Isbn extension type

An ISBN (International Standard Book Number): validated for length, prefix, and the ISO 2108 check digit, mod-11 over the ten-digit form and GS1 mod-10 over the thirteen-digit one. Standard: ISO 2108.

Normalisation on parse: spaces and hyphens are stripped, a trailing x is upper-cased, and the ten-digit form is folded into its thirteen-digit equivalent, so value is always thirteen digits and the two spellings of one book compare equal. isbn10 rebuilds the legacy form.

Not hyphenated: the group boundaries come from ISBN International's range table, not the digits.

final isbn = Isbn.tryParse('0-306-40615-2')!;
print(isbn.value); // 9780306406157
print(isbn.isbn10); // 0306406152  (null for a 979 ISBN, which never had one)
print(Isbn.tryParse('9790260000438')); // null (an ISMN: printed music, not a book)
on

Properties

body → Digits
The nine digits between the prefix and the check digit: registration group, registrant and publication, run together. Splitting them needs a range table this package does not carry.
no setter
checkDigit → Digit
The final digit, the GS1 mod-10 check over the other twelve.
no setter
isbn10 → String?
The legacy ten-character form (mod-11 check digit, X for ten), or null for a 979 ISBN, which never had one.
no setter
prefix → Digits
The three-digit GS1 prefix, 978 or 979. Read Digits.asString for the plain text.
no setter
value → String
final

Static Methods

fromComponents({required Digits prefix, required Digits body}) → ParseOutcome<IsbnFailure, Isbn>
Builds an Isbn from its GS1 prefix (978 or 979) and nine-digit body, computing the check digit, reporting the IsbnFailure when the parts don't form a valid ISBN.
parse(String input) → ParseOutcome<IsbnFailure, Isbn>
Parses input as an ISBN, reporting the IsbnFailure that says which check failed.
tryParse(String input) → Isbn?
Parses input as an ISBN, or returns null when it fails the length, character, prefix, or check-digit tests. Both generations are accepted; the result is always thirteen digits.