Talk:ISBN

1970?
I have books from the 1950's with ISBNs in them. So 1970 cannot be right. 79.106.209.200 (talk) 09:26, 28 December 2022 (UTC)


 * Are you sure that they were printed in the 1950's, rather than a reprint of a 1950's edition? Can you give an example with title and ISBN. Jameel the Saluki (talk) 10:27, 28 December 2022 (UTC)
 * Hi,
 * I'm refering some historical documents for a project and sometimes the timestamp is significant. To cope with human error I try to get the original printed or eBook. So I found these "first" editions.
 * ISO website [«Title missing» ?]: «Publication date : 1972-01»:
 * https://www.iso.org/standard/1939.html
 * Non ISO website: «Première édition - 1972-07-01»:
 * https://cdn.standards.iteh.ai/samples/1939/f315f1b6722c40bba2426047aaff1240/ISO-2108-1972.pdf FrenkenRef (talk) 18:26, 29 September 2023 (UTC)

ISBN suffix?
Was there at some time a system of suffixes for (I)SBNs? The 1975 printing of L. Sprague de Camp's Lost Continents says "SBN 345-24379-X-195" (see https://archive.org/details/lostcontinentsat00deca/page/n5). Obviously first nine digits are the SBN, but what about the "-195"? (Maybe it indicates the original publisher of the first edition?) Web searches haven't turned up anything. KarenSutherland (talk) 07:10, 7 April 2023 (UTC)


 * @KarenSutherland bit of a belated reply, but there's a note on this under 'History' - it was occasionally used to indicate the price, in this case presumably $1.95. Andrew Gray (talk) 10:50, 22 September 2023 (UTC)
 * If it was a SBN, it wouldn't be dollars - SBNs were British. Pounds is much more likely. -- Red rose64 &#x1f339; (talk) 11:03, 23 September 2023 (UTC)
 * @Redrose64 I had thought that initially, but Ballantine who were mentioned in the text (& also published the linked edition) were American. Turns out if you look closely at the front cover it has a listed price of $1.95 in the top left.
 * Why Ballantine decided to keep printing nine-digit SBNs rather than ISBNs is a bit beyond me, but it does seem to have been the case. Andrew Gray (talk) 23:21, 23 September 2023 (UTC)

Semi-protected edit request on 21 November 2023
Change the establishment date from 1970 to 1967, as this is the more accurate date. My source is "https://www.archwaypublishing.com/en/faq/10-things-you-should-know-about-isbn" Guano islands (talk) 02:01, 21 November 2023 (UTC)


 * ✅ Changed date and added reference. Lewcm Talk to me! 22:06, 21 November 2023 (UTC)

Semi-protected edit request on 29 January 2024
Please remove these phrases: will each have a different ISBN. will each have a different ISBN assigned to it. and replace them with: must each have a different ISBN. must each have a different ISBN assigned to it. #1 is a lede summary dependent on #2, which relies on a source that says that each edition "shall be assigned" a different ISBN. Sometimes, publishers don't comply and don't assign separate ISBNs to different editions, so "will" is wrong, but "must" isn't affected by non-compliance. 123.51.107.94 (talk) 00:55, 29 January 2024 (UTC)


 * ✅ I think "must" is better wording. In the document, "shall" is a pretty bad word for them to use as it can mean either "must" or "will" (thesaurus.com says they're synonyms.) Coulomb1 (talk) 02:15, 29 January 2024 (UTC)

checking for valid ISBN
Currently the article has a function `CheckISBN` written in C that returns the error syndrome. However, it expects the input to be `int const digits[10]`, which is quite nonsensical and to the least impractical. Bytes would be more appropriate for digits -- where would you find an ISBN coded as array of ten 32-bit integers? It would be easy to allow to scan a string of bytes that might indifferently be UTF-8 or integer digits. I suggest the following code: def CheckISBN(digits: Iterable) -> int: """Return ISBN error syndrome, zero for a valid ISBN, non-zero for an invalid one.    Items in 'digits' that can't be cast to integer are ignored.""" c = t = s = u = 0 for d in digits: try: if c&1: u += int(d)   # for 13-digit ISBN t += int(d); s += t; c += 1 except ValueError: pass   # ignore non-digits like spaces, '-', ... if c == 10: return s % 11 if c != 13: raise ValueError(f"Expected 10 or 13 digits, got {c}.") return (t+2*u) % 10 If the C implementation is to be retained, one could use `t += digits[i] & 15` to convert ASCII digits to integers. As explained earlier, the argument should be `char digits[10]` to use bytes or characters rather than 32-bit integers. &mdash; MFH:Talk 17:31, 20 May 2024 (UTC)


 * I disagree. That just obfuscates the straightforward algorithm. KISS principle ToraNeko (talk) ToraNeko (talk) 10:32, 31 May 2024 (UTC)