From fbb9d75cc804dd579222d3c30c2c160d21a57d76 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 17 Jul 2023 06:55:49 -0700 Subject: [PATCH 01/23] Avoid server error when encountering broken edition If an edition is missing its work, this change allows the page to still load without a server error; this is important because otherwise the book will break every page it appears on, including the feed page. --- bookwyrm/templatetags/rating_tags.py | 4 ++++ bookwyrm/tests/templatetags/test_rating_tags.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/bookwyrm/templatetags/rating_tags.py b/bookwyrm/templatetags/rating_tags.py index cc23d3308..367463a8f 100644 --- a/bookwyrm/templatetags/rating_tags.py +++ b/bookwyrm/templatetags/rating_tags.py @@ -12,6 +12,10 @@ register = template.Library() @register.filter(name="rating") def get_rating(book, user): """get the overall rating of a book""" + # this shouldn't happen, but it CAN + if not book.parent_work: + return None + return cache.get_or_set( f"book-rating-{book.parent_work.id}", lambda u, b: models.Review.objects.filter( diff --git a/bookwyrm/tests/templatetags/test_rating_tags.py b/bookwyrm/tests/templatetags/test_rating_tags.py index 5abfa471a..8c07eeb8f 100644 --- a/bookwyrm/tests/templatetags/test_rating_tags.py +++ b/bookwyrm/tests/templatetags/test_rating_tags.py @@ -71,6 +71,12 @@ class RatingTags(TestCase): ) self.assertEqual(rating_tags.get_rating(self.book, self.local_user), 5) + def test_get_rating_broken_edition(self, *_): + """Don't have a server error if an edition is missing a work""" + broken_book = models.Edition.objects.create(title="Test") + broken_book.parent_work = None + self.assertIsNone(rating_tags.get_rating(broken_book, self.local_user)) + def test_get_user_rating(self, *_): """get a user's most recent rating of a book""" with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"): From eee4e30e25f50b468c65ad27fec25bde4cd25491 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 17 Jul 2023 11:20:36 -0700 Subject: [PATCH 02/23] Adds managment command to repair editions in bad state --- .../management/commands/repair_editions.py | 21 +++++++++++++++++++ bookwyrm/models/activitypub_mixin.py | 12 +++++++++++ bookwyrm/models/book.py | 21 +++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 bookwyrm/management/commands/repair_editions.py diff --git a/bookwyrm/management/commands/repair_editions.py b/bookwyrm/management/commands/repair_editions.py new file mode 100644 index 000000000..d43ad6ca6 --- /dev/null +++ b/bookwyrm/management/commands/repair_editions.py @@ -0,0 +1,21 @@ +""" Repair editions with missing works """ +from django.core.management.base import BaseCommand +from bookwyrm import models + + +class Commmand(BaseCommand): + """command-line options""" + + help = "Repairs an edition that is in a broken state" + + # pylint: disable=unused-argument + def handle(self, *args, **options): + """Find and repair broken editions""" + # Find broken editions + editions = models.Edition.objects.filter(parent_work__isnull=True) + self.stdout.write(f"Repairing {editions.count()} edition(s):") + + # Do repair + for edition in editions: + edition.repair() + self.stdout.write(".", ending="") diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index d1ca3747a..3139e2de8 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -126,6 +126,18 @@ class ActivitypubMixin: # there OUGHT to be only one match return match.first() + def get_dedpulication_field_json(self): + """A json blob of deduplication fields (like remote_id, or ISBN)""" + data = {} + for field in self._meta.get_fields(): + if ( + not hasattr(field, "deduplication_field") + or not field.deduplication_field + ): + continue + data[field.name] = getattr(self, field.name) + return data + def broadcast(self, activity, sender, software=None, queue=BROADCAST): """send out an activity""" broadcast_task.apply_async( diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index c25f8fee2..88d568288 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -2,6 +2,7 @@ from itertools import chain import re +from django.apps import apps from django.contrib.postgres.search import SearchVectorField from django.contrib.postgres.indexes import GinIndex from django.core.cache import cache @@ -380,6 +381,26 @@ class Edition(Book): return super().save(*args, **kwargs) + def repair(self): + """If an edition is in a bad state (missing a work), let's fix that""" + # made sure it actually NEEDS reapir + if self.parent_work: + return + + # try to find a duplicate of this edition first + model = apps.get_model("bookwyrm.Edition", require_ready=True) + data = self.get_dedpulication_field_json() + existing_match = model.find_existing(data) + + # assign this edition to the parent of the duplicate edition + new_work = existing_match.parent_work + # if not, create a new work for it + if not new_work: + new_work = models.Work.objects.create(title=self.title) + + self.parent_work = new_work + self.save(update_fields=["parent_work"], broadcast=False) + @classmethod def viewer_aware_objects(cls, viewer): """annotate a book query with metadata related to the user""" From 8b88de624d04167f3e910e925a2a68622bae9449 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Mon, 17 Jul 2023 20:00:45 -0700 Subject: [PATCH 03/23] Adds test and fixes logic errors --- bookwyrm/models/book.py | 8 ++++---- bookwyrm/tests/models/test_book_model.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 88d568288..6c40061b9 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -393,10 +393,10 @@ class Edition(Book): existing_match = model.find_existing(data) # assign this edition to the parent of the duplicate edition - new_work = existing_match.parent_work - # if not, create a new work for it - if not new_work: - new_work = models.Work.objects.create(title=self.title) + if existing_match and existing_match.parent_work: + new_work = existing_match.parent_work + else: + new_work = Work.objects.create(title=self.title) self.parent_work = new_work self.save(update_fields=["parent_work"], broadcast=False) diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 825f42b87..a615a76af 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -143,3 +143,13 @@ class Book(TestCase): for article in articles ) self.assertTrue(all(book.sort_title == "test edition" for book in books)) + + def test_repair_edition(self): + """Fix editions with no works""" + edition = models.Edition.objects.create(title="test") + self.assertIsNone(edition.parent_work) + + edition.repair() + edition.refresh_from_db() + + self.assertEqual(edition.parent_work.title, "test") From ccf3a4c5c193319238265125e6e1e12deb981bf7 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 18 Jul 2023 19:33:02 -0700 Subject: [PATCH 04/23] Skip trying to match editions It's rare that it will be useful, and it was a huge hassle. --- bookwyrm/models/activitypub_mixin.py | 12 ------------ bookwyrm/models/book.py | 13 +++---------- bookwyrm/tests/models/test_book_model.py | 5 +++-- 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/bookwyrm/models/activitypub_mixin.py b/bookwyrm/models/activitypub_mixin.py index 3139e2de8..d1ca3747a 100644 --- a/bookwyrm/models/activitypub_mixin.py +++ b/bookwyrm/models/activitypub_mixin.py @@ -126,18 +126,6 @@ class ActivitypubMixin: # there OUGHT to be only one match return match.first() - def get_dedpulication_field_json(self): - """A json blob of deduplication fields (like remote_id, or ISBN)""" - data = {} - for field in self._meta.get_fields(): - if ( - not hasattr(field, "deduplication_field") - or not field.deduplication_field - ): - continue - data[field.name] = getattr(self, field.name) - return data - def broadcast(self, activity, sender, software=None, queue=BROADCAST): """send out an activity""" broadcast_task.apply_async( diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 6c40061b9..6a779b0f6 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -2,7 +2,6 @@ from itertools import chain import re -from django.apps import apps from django.contrib.postgres.search import SearchVectorField from django.contrib.postgres.indexes import GinIndex from django.core.cache import cache @@ -381,22 +380,16 @@ class Edition(Book): return super().save(*args, **kwargs) + @transaction.atomic def repair(self): """If an edition is in a bad state (missing a work), let's fix that""" # made sure it actually NEEDS reapir if self.parent_work: return - # try to find a duplicate of this edition first - model = apps.get_model("bookwyrm.Edition", require_ready=True) - data = self.get_dedpulication_field_json() - existing_match = model.find_existing(data) - # assign this edition to the parent of the duplicate edition - if existing_match and existing_match.parent_work: - new_work = existing_match.parent_work - else: - new_work = Work.objects.create(title=self.title) + new_work = Work.objects.create(title=self.title) + new_work.authors.set(self.authors.all()) self.parent_work = new_work self.save(update_fields=["parent_work"], broadcast=False) diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index a615a76af..6dd83b764 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -24,8 +24,7 @@ class Book(TestCase): title="Example Work", remote_id="https://example.com/book/1" ) self.first_edition = models.Edition.objects.create( - title="Example Edition", - parent_work=self.work, + title="Example Edition", parent_work=self.work, isbn_10="1111111111" ) self.second_edition = models.Edition.objects.create( title="Another Example Edition", @@ -147,9 +146,11 @@ class Book(TestCase): def test_repair_edition(self): """Fix editions with no works""" edition = models.Edition.objects.create(title="test") + edition.authors.set([models.Author.objects.create(name="Author Name")]) self.assertIsNone(edition.parent_work) edition.repair() edition.refresh_from_db() self.assertEqual(edition.parent_work.title, "test") + self.assertEqual(edition.parent_work.authors.count(), 1) From eae06602a990de56ab3b5e6e5ffe968f8f7cc520 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 21 Jul 2023 14:38:28 -0700 Subject: [PATCH 05/23] Fixes test data --- bookwyrm/tests/models/test_book_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 6dd83b764..590b7b873 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -24,7 +24,7 @@ class Book(TestCase): title="Example Work", remote_id="https://example.com/book/1" ) self.first_edition = models.Edition.objects.create( - title="Example Edition", parent_work=self.work, isbn_10="1111111111" + title="Example Edition", parent_work=self.work ) self.second_edition = models.Edition.objects.create( title="Another Example Edition", From d2c4785af1fbd741bb67c70fd0cfa3313f20eb48 Mon Sep 17 00:00:00 2001 From: axiomizer Date: Fri, 21 Jul 2023 21:23:35 -0400 Subject: [PATCH 06/23] Hyphenate ISBN numbers and add copy button --- bookwyrm/isbn/RangeMessage.xml | 7904 +++++++++++++++++ bookwyrm/isbn/__init__.py | 0 bookwyrm/isbn/isbn.py | 71 + .../static/css/bookwyrm/components/_copy.scss | 28 + bookwyrm/static/css/fonts/icomoon.eot | Bin 10688 -> 10812 bytes bookwyrm/static/css/fonts/icomoon.svg | 1 + bookwyrm/static/css/fonts/icomoon.ttf | Bin 10524 -> 10648 bytes bookwyrm/static/css/fonts/icomoon.woff | Bin 10600 -> 10724 bytes bookwyrm/static/css/vendor/icons.css | 13 +- bookwyrm/static/js/bookwyrm.js | 17 + bookwyrm/templates/book/book_identifiers.html | 20 +- bookwyrm/views/books/books.py | 2 + 12 files changed, 8044 insertions(+), 12 deletions(-) create mode 100644 bookwyrm/isbn/RangeMessage.xml create mode 100644 bookwyrm/isbn/__init__.py create mode 100644 bookwyrm/isbn/isbn.py diff --git a/bookwyrm/isbn/RangeMessage.xml b/bookwyrm/isbn/RangeMessage.xml new file mode 100644 index 000000000..619cf1ff7 --- /dev/null +++ b/bookwyrm/isbn/RangeMessage.xml @@ -0,0 +1,7904 @@ + + + + + + + + + + + + + + + +]> + + International ISBN Agency + fa1a5bb4-9703-4910-bd34-2ffe0ae46c45 + Sat, 22 Jul 2023 02:00:37 BST + + + 978 + International ISBN Agency + + + 0000000-5999999 + 1 + + + 6000000-6499999 + 3 + + + 6500000-6599999 + 2 + + + 6600000-6999999 + 0 + + + 7000000-7999999 + 1 + + + 8000000-9499999 + 2 + + + 9500000-9899999 + 3 + + + 9900000-9989999 + 4 + + + 9990000-9999999 + 5 + + + + + 979 + International ISBN Agency + + + 0000000-0999999 + 0 + + + 1000000-1299999 + 2 + + + 1300000-7999999 + 0 + + + 8000000-8999999 + 1 + + + 9000000-9999999 + 0 + + + + + + + 978-0 + English language + + + 0000000-1999999 + 2 + + + 2000000-2279999 + 3 + + + 2280000-2289999 + 4 + + + 2290000-3689999 + 3 + + + 3690000-3699999 + 4 + + + 3700000-6389999 + 3 + + + 6390000-6397999 + 4 + + + 6398000-6399999 + 7 + + + 6400000-6449999 + 3 + + + 6450000-6459999 + 7 + + + 6460000-6479999 + 3 + + + 6480000-6489999 + 7 + + + 6490000-6549999 + 3 + + + 6550000-6559999 + 4 + + + 6560000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9499999 + 6 + + + 9500000-9999999 + 7 + + + + + 978-1 + English language + + + 0000000-0099999 + 3 + + + 0100000-0299999 + 2 + + + 0300000-0349999 + 3 + + + 0350000-0399999 + 4 + + + 0400000-0499999 + 3 + + + 0500000-0699999 + 2 + + + 0700000-0999999 + 4 + + + 1000000-3979999 + 3 + + + 3980000-5499999 + 4 + + + 5500000-6499999 + 5 + + + 6500000-6799999 + 4 + + + 6800000-6859999 + 5 + + + 6860000-7139999 + 4 + + + 7140000-7169999 + 3 + + + 7170000-7319999 + 4 + + + 7320000-7399999 + 7 + + + 7400000-7749999 + 5 + + + 7750000-7753999 + 7 + + + 7754000-7763999 + 5 + + + 7764000-7764999 + 7 + + + 7765000-7769999 + 5 + + + 7770000-7782999 + 7 + + + 7783000-7899999 + 5 + + + 7900000-7999999 + 4 + + + 8000000-8004999 + 5 + + + 8005000-8049999 + 5 + + + 8050000-8379999 + 5 + + + 8380000-8384999 + 7 + + + 8385000-8671999 + 5 + + + 8672000-8675999 + 4 + + + 8676000-8697999 + 5 + + + 8698000-9159999 + 6 + + + 9160000-9165059 + 7 + + + 9165060-9168699 + 6 + + + 9168700-9169079 + 7 + + + 9169080-9195999 + 6 + + + 9196000-9196549 + 7 + + + 9196550-9729999 + 6 + + + 9730000-9877999 + 4 + + + 9878000-9911499 + 6 + + + 9911500-9911999 + 7 + + + 9912000-9989899 + 6 + + + 9989900-9999999 + 7 + + + + + 978-2 + French language + + + 0000000-1999999 + 2 + + + 2000000-3499999 + 3 + + + 3500000-3999999 + 5 + + + 4000000-4869999 + 3 + + + 4870000-4949999 + 6 + + + 4950000-4959999 + 3 + + + 4960000-4966999 + 4 + + + 4967000-4969999 + 5 + + + 4970000-5279999 + 3 + + + 5280000-5299999 + 4 + + + 5300000-6999999 + 3 + + + 7000000-8399999 + 4 + + + 8400000-8999999 + 5 + + + 9000000-9197999 + 6 + + + 9198000-9198099 + 5 + + + 9198100-9199429 + 6 + + + 9199430-9199689 + 7 + + + 9199690-9499999 + 6 + + + 9500000-9999999 + 7 + + + + + 978-3 + German language + + + 0000000-0299999 + 2 + + + 0300000-0339999 + 3 + + + 0340000-0369999 + 4 + + + 0370000-0399999 + 5 + + + 0400000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9499999 + 6 + + + 9500000-9539999 + 7 + + + 9540000-9699999 + 5 + + + 9700000-9849999 + 7 + + + 9850000-9999999 + 5 + + + + + 978-4 + Japan + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9499999 + 6 + + + 9500000-9999999 + 7 + + + + + 978-5 + former U.S.S.R + + + 0000000-0049999 + 5 + + + 0050000-0099999 + 4 + + + 0100000-1999999 + 2 + + + 2000000-3619999 + 3 + + + 3620000-3623999 + 4 + + + 3624000-3629999 + 5 + + + 3630000-4209999 + 3 + + + 4210000-4299999 + 4 + + + 4300000-4309999 + 3 + + + 4310000-4399999 + 4 + + + 4400000-4409999 + 3 + + + 4410000-4499999 + 4 + + + 4500000-6039999 + 3 + + + 6040000-6049999 + 7 + + + 6050000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9099999 + 6 + + + 9100000-9199999 + 5 + + + 9200000-9299999 + 4 + + + 9300000-9499999 + 5 + + + 9500000-9500999 + 7 + + + 9501000-9799999 + 4 + + + 9800000-9899999 + 5 + + + 9900000-9909999 + 7 + + + 9910000-9999999 + 4 + + + + + 978-600 + Iran + + + 0000000-0999999 + 2 + + + 1000000-4999999 + 3 + + + 5000000-8999999 + 4 + + + 9000000-9867999 + 5 + + + 9868000-9929999 + 4 + + + 9930000-9959999 + 3 + + + 9960000-9999999 + 5 + + + + + 978-601 + Kazakhstan + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-7999999 + 4 + + + 8000000-8499999 + 5 + + + 8500000-9999999 + 2 + + + + + 978-602 + Indonesia + + + 0000000-0699999 + 2 + + + 0700000-1399999 + 4 + + + 1400000-1499999 + 5 + + + 1500000-1699999 + 4 + + + 1700000-1999999 + 5 + + + 2000000-4999999 + 3 + + + 5000000-5399999 + 5 + + + 5400000-5999999 + 4 + + + 6000000-6199999 + 5 + + + 6200000-6999999 + 4 + + + 7000000-7499999 + 5 + + + 7500000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-603 + Saudi Arabia + + + 0000000-0499999 + 2 + + + 0500000-4999999 + 2 + + + 5000000-7999999 + 3 + + + 8000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-604 + Vietnam + + + 0000000-2999999 + 1 + + + 3000000-3999999 + 3 + + + 4000000-4699999 + 2 + + + 4700000-4979999 + 3 + + + 4980000-4999999 + 4 + + + 5000000-8999999 + 2 + + + 9000000-9799999 + 3 + + + 9800000-9999999 + 4 + + + + + 978-605 + Turkey + + + 0000000-0299999 + 2 + + + 0300000-0399999 + 3 + + + 0400000-0599999 + 2 + + + 0600000-0699999 + 5 + + + 0700000-0999999 + 2 + + + 1000000-1999999 + 3 + + + 2000000-2399999 + 4 + + + 2400000-3999999 + 3 + + + 4000000-5999999 + 4 + + + 6000000-7499999 + 5 + + + 7500000-7999999 + 4 + + + 8000000-8999999 + 5 + + + 9000000-9999999 + 4 + + + + + 978-606 + Romania + + + 0000000-0999999 + 3 + + + 1000000-4999999 + 2 + + + 5000000-7999999 + 3 + + + 8000000-9099999 + 4 + + + 9100000-9199999 + 3 + + + 9200000-9599999 + 5 + + + 9600000-9749999 + 4 + + + 9750000-9999999 + 3 + + + + + 978-607 + Mexico + + + 0000000-3999999 + 2 + + + 4000000-5929999 + 3 + + + 5930000-5999999 + 5 + + + 6000000-7499999 + 3 + + + 7500000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-608 + North Macedonia + + + 0000000-0999999 + 1 + + + 1000000-1999999 + 2 + + + 2000000-4499999 + 3 + + + 4500000-6499999 + 4 + + + 6500000-6999999 + 5 + + + 7000000-9999999 + 1 + + + + + 978-609 + Lithuania + + + 0000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-611 + Thailand + + + 0000000-9999999 + 0 + + + + + 978-612 + Peru + + + 0000000-2999999 + 2 + + + 3000000-3999999 + 3 + + + 4000000-4499999 + 4 + + + 4500000-4999999 + 5 + + + 5000000-5149999 + 4 + + + 5150000-9999999 + 0 + + + + + 978-613 + Mauritius + + + 0000000-9999999 + 1 + + + + + 978-614 + Lebanon + + + 0000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-615 + Hungary + + + 0000000-0999999 + 2 + + + 1000000-4999999 + 3 + + + 5000000-7999999 + 4 + + + 8000000-8999999 + 5 + + + 9000000-9999999 + 0 + + + + + 978-616 + Thailand + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-617 + Ukraine + + + 0000000-4999999 + 2 + + + 5000000-6999999 + 3 + + + 7000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-618 + Greece + + + 0000000-1999999 + 2 + + + 2000000-4999999 + 3 + + + 5000000-7999999 + 4 + + + 8000000-9999999 + 5 + + + + + 978-619 + Bulgaria + + + 0000000-1499999 + 2 + + + 1500000-6999999 + 3 + + + 7000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-620 + Mauritius + + + 0000000-9999999 + 1 + + + + + 978-621 + Philippines + + + 0000000-2999999 + 2 + + + 3000000-3999999 + 0 + + + 4000000-5999999 + 3 + + + 6000000-7999999 + 0 + + + 8000000-8999999 + 4 + + + 9000000-9499999 + 0 + + + 9500000-9999999 + 5 + + + + + 978-622 + Iran + + + 0000000-1099999 + 2 + + + 1100000-1999999 + 0 + + + 2000000-4249999 + 3 + + + 4250000-5199999 + 0 + + + 5200000-8499999 + 4 + + + 8500000-8999999 + 0 + + + 9000000-9999999 + 5 + + + + + 978-623 + Indonesia + + + 0000000-0999999 + 2 + + + 1000000-1299999 + 0 + + + 1300000-4999999 + 3 + + + 5000000-5249999 + 0 + + + 5250000-8799999 + 4 + + + 8800000-9999999 + 5 + + + + + 978-624 + Sri Lanka + + + 0000000-0499999 + 2 + + + 0500000-1999999 + 0 + + + 2000000-2499999 + 3 + + + 2500000-4999999 + 0 + + + 5000000-6449999 + 4 + + + 6450000-9449999 + 0 + + + 9450000-9999999 + 5 + + + + + 978-625 + Turkey + + + 0000000-0099999 + 2 + + + 0100000-3649999 + 0 + + + 3650000-4429999 + 3 + + + 4430000-4449999 + 5 + + + 4450000-4499999 + 3 + + + 4500000-6349999 + 0 + + + 6350000-7793999 + 4 + + + 7794000-7794999 + 5 + + + 7795000-8499999 + 4 + + + 8500000-9899999 + 0 + + + 9900000-9999999 + 5 + + + + + 978-626 + Taiwan + + + 0000000-0499999 + 2 + + + 0500000-2999999 + 0 + + + 3000000-4999999 + 3 + + + 5000000-6999999 + 0 + + + 7000000-7999999 + 4 + + + 8000000-9499999 + 0 + + + 9500000-9999999 + 5 + + + + + 978-627 + Pakistan + + + 0000000-2999999 + 0 + + + 3000000-3199999 + 2 + + + 3200000-4999999 + 0 + + + 5000000-5249999 + 3 + + + 5250000-7499999 + 0 + + + 7500000-7999999 + 4 + + + 8000000-9999999 + 0 + + + + + 978-628 + Colombia + + + 0000000-0999999 + 2 + + + 1000000-4999999 + 0 + + + 5000000-5499999 + 3 + + + 5500000-7499999 + 0 + + + 7500000-8499999 + 4 + + + 8500000-9499999 + 0 + + + 9500000-9999999 + 5 + + + + + 978-629 + Malaysia + + + 0000000-0299999 + 2 + + + 0300000-4699999 + 0 + + + 4700000-4999999 + 3 + + + 5000000-7499999 + 0 + + + 7500000-7999999 + 4 + + + 8000000-9649999 + 0 + + + 9650000-9999999 + 5 + + + + + 978-630 + Romania + + + 0000000-2999999 + 0 + + + 3000000-3499999 + 3 + + + 3500000-6499999 + 0 + + + 6500000-6849999 + 4 + + + 6850000-9999999 + 0 + + + + + 978-631 + Argentina + + + 0000000-0999999 + 2 + + + 1000000-2999999 + 0 + + + 3000000-3999999 + 3 + + + 4000000-6499999 + 0 + + + 6500000-7499999 + 4 + + + 7500000-8999999 + 0 + + + 9000000-9999999 + 5 + + + + + 978-65 + Brazil + + + 0000000-0199999 + 2 + + + 0200000-2499999 + 0 + + + 2500000-2999999 + 3 + + + 3000000-3029999 + 3 + + + 3030000-4999999 + 0 + + + 5000000-5129999 + 4 + + + 5130000-5349999 + 0 + + + 5350000-6149999 + 4 + + + 6150000-7999999 + 0 + + + 8000000-8182499 + 5 + + + 8182500-8449999 + 0 + + + 8450000-8999999 + 5 + + + 9000000-9024499 + 6 + + + 9024500-9799999 + 0 + + + 9800000-9999999 + 6 + + + + + 978-7 + China, People's Republic + + + 0000000-0999999 + 2 + + + 1000000-4999999 + 3 + + + 5000000-7999999 + 4 + + + 8000000-8999999 + 5 + + + 9000000-9999999 + 6 + + + + + 978-80 + former Czechoslovakia + + + 0000000-1999999 + 2 + + + 2000000-5299999 + 3 + + + 5300000-5499999 + 5 + + + 5500000-6899999 + 3 + + + 6900000-6999999 + 5 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9989999 + 6 + + + 9990000-9999999 + 5 + + + + + 978-81 + India + + + 0000000-1899999 + 2 + + + 1900000-1999999 + 5 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9999999 + 6 + + + + + 978-82 + Norway + + + 0000000-1999999 + 2 + + + 2000000-6899999 + 3 + + + 6900000-6999999 + 6 + + + 7000000-8999999 + 4 + + + 9000000-9899999 + 5 + + + 9900000-9999999 + 6 + + + + + 978-83 + Poland + + + 0000000-1999999 + 2 + + + 2000000-5999999 + 3 + + + 6000000-6999999 + 5 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9999999 + 6 + + + + + 978-84 + Spain + + + 0000000-0999999 + 2 + + + 1000000-1049999 + 5 + + + 1050000-1199999 + 4 + + + 1200000-1299999 + 6 + + + 1300000-1399999 + 4 + + + 1400000-1499999 + 3 + + + 1500000-1999999 + 5 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9199999 + 4 + + + 9200000-9239999 + 6 + + + 9240000-9299999 + 5 + + + 9300000-9499999 + 6 + + + 9500000-9699999 + 5 + + + 9700000-9999999 + 4 + + + + + 978-85 + Brazil + + + 0000000-1999999 + 2 + + + 2000000-4549999 + 3 + + + 4550000-4552999 + 6 + + + 4553000-4559999 + 5 + + + 4560000-5289999 + 3 + + + 5290000-5319999 + 5 + + + 5320000-5339999 + 4 + + + 5340000-5399999 + 3 + + + 5400000-5402999 + 5 + + + 5403000-5403999 + 5 + + + 5404000-5404999 + 6 + + + 5405000-5408999 + 5 + + + 5409000-5409999 + 6 + + + 5410000-5439999 + 5 + + + 5440000-5479999 + 4 + + + 5480000-5499999 + 5 + + + 5500000-5999999 + 4 + + + 6000000-6999999 + 5 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9249999 + 6 + + + 9250000-9449999 + 5 + + + 9450000-9599999 + 4 + + + 9600000-9799999 + 2 + + + 9800000-9999999 + 5 + + + + + 978-86 + former Yugoslavia + + + 0000000-2999999 + 2 + + + 3000000-5999999 + 3 + + + 6000000-7999999 + 4 + + + 8000000-8999999 + 5 + + + 9000000-9999999 + 6 + + + + + 978-87 + Denmark + + + 0000000-2999999 + 2 + + + 3000000-3999999 + 0 + + + 4000000-6499999 + 3 + + + 6500000-6999999 + 0 + + + 7000000-7999999 + 4 + + + 8000000-8499999 + 0 + + + 8500000-9499999 + 5 + + + 9500000-9699999 + 0 + + + 9700000-9999999 + 6 + + + + + 978-88 + Italy + + + 0000000-1999999 + 2 + + + 2000000-3119999 + 3 + + + 3120000-3149999 + 5 + + + 3150000-3189999 + 3 + + + 3190000-3229999 + 5 + + + 3230000-3269999 + 3 + + + 3270000-3389999 + 4 + + + 3390000-3609999 + 3 + + + 3610000-3629999 + 4 + + + 3630000-5489999 + 3 + + + 5490000-5549999 + 4 + + + 5550000-5999999 + 3 + + + 6000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9099999 + 6 + + + 9100000-9269999 + 3 + + + 9270000-9399999 + 4 + + + 9400000-9479999 + 6 + + + 9480000-9999999 + 5 + + + + + 978-89 + Korea, Republic + + + 0000000-2499999 + 2 + + + 2500000-5499999 + 3 + + + 5500000-8499999 + 4 + + + 8500000-9499999 + 5 + + + 9500000-9699999 + 6 + + + 9700000-9899999 + 5 + + + 9900000-9999999 + 3 + + + + + 978-90 + Netherlands + + + 0000000-1999999 + 2 + + + 2000000-4999999 + 3 + + + 5000000-6999999 + 4 + + + 7000000-7999999 + 5 + + + 8000000-8499999 + 6 + + + 8500000-8999999 + 4 + + + 9000000-9099999 + 2 + + + 9100000-9399999 + 0 + + + 9400000-9499999 + 2 + + + 9500000-9999999 + 0 + + + + + 978-91 + Sweden + + + 0000000-1999999 + 1 + + + 2000000-4999999 + 2 + + + 5000000-6499999 + 3 + + + 6500000-6999999 + 0 + + + 7000000-8199999 + 4 + + + 8200000-8499999 + 0 + + + 8500000-9499999 + 5 + + + 9500000-9699999 + 0 + + + 9700000-9999999 + 6 + + + + + 978-92 + International NGO Publishers and EU Organizations + + + 0000000-5999999 + 1 + + + 6000000-7999999 + 2 + + + 8000000-8999999 + 3 + + + 9000000-9499999 + 4 + + + 9500000-9899999 + 5 + + + 9900000-9999999 + 6 + + + + + 978-93 + India + + + 0000000-0999999 + 2 + + + 1000000-4999999 + 3 + + + 5000000-7999999 + 4 + + + 8000000-9599999 + 5 + + + 9600000-9999999 + 6 + + + + + 978-94 + Netherlands + + + 0000000-5999999 + 3 + + + 6000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-950 + Argentina + + + 0000000-4999999 + 2 + + + 5000000-8999999 + 3 + + + 9000000-9899999 + 4 + + + 9900000-9999999 + 5 + + + + + 978-951 + Finland + + + 0000000-1999999 + 1 + + + 2000000-5499999 + 2 + + + 5500000-8899999 + 3 + + + 8900000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-952 + Finland + + + 0000000-1999999 + 2 + + + 2000000-4999999 + 3 + + + 5000000-5999999 + 4 + + + 6000000-6499999 + 2 + + + 6500000-6599999 + 5 + + + 6600000-6699999 + 4 + + + 6700000-6999999 + 5 + + + 7000000-7999999 + 4 + + + 8000000-9499999 + 2 + + + 9500000-9899999 + 4 + + + 9900000-9999999 + 5 + + + + + 978-953 + Croatia + + + 0000000-0999999 + 1 + + + 1000000-1499999 + 2 + + + 1500000-4799999 + 3 + + + 4800000-4999999 + 5 + + + 5000000-5009999 + 3 + + + 5010000-5099999 + 5 + + + 5100000-5499999 + 2 + + + 5500000-5999999 + 5 + + + 6000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-954 + Bulgaria + + + 0000000-2899999 + 2 + + + 2900000-2999999 + 4 + + + 3000000-7999999 + 3 + + + 8000000-8999999 + 4 + + + 9000000-9299999 + 5 + + + 9300000-9999999 + 4 + + + + + 978-955 + Sri Lanka + + + 0000000-1999999 + 4 + + + 2000000-3399999 + 2 + + + 3400000-3549999 + 4 + + + 3550000-3599999 + 5 + + + 3600000-3799999 + 4 + + + 3800000-3899999 + 5 + + + 3900000-4099999 + 4 + + + 4100000-4499999 + 5 + + + 4500000-4999999 + 4 + + + 5000000-5499999 + 5 + + + 5500000-7109999 + 3 + + + 7110000-7149999 + 5 + + + 7150000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-956 + Chile + + + 0000000-0899999 + 2 + + + 0900000-0999999 + 5 + + + 1000000-1999999 + 2 + + + 2000000-5999999 + 3 + + + 6000000-6999999 + 4 + + + 7000000-9999999 + 4 + + + + + 978-957 + Taiwan + + + 0000000-0299999 + 2 + + + 0300000-0499999 + 4 + + + 0500000-1999999 + 2 + + + 2000000-2099999 + 4 + + + 2100000-2799999 + 2 + + + 2800000-3099999 + 5 + + + 3100000-4399999 + 2 + + + 4400000-8199999 + 3 + + + 8200000-9699999 + 4 + + + 9700000-9999999 + 5 + + + + + 978-958 + Colombia + + + 0000000-4999999 + 2 + + + 5000000-5099999 + 3 + + + 5100000-5199999 + 4 + + + 5200000-5399999 + 5 + + + 5400000-5599999 + 4 + + + 5600000-5999999 + 5 + + + 6000000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-959 + Cuba + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-9999999 + 5 + + + + + 978-960 + Greece + + + 0000000-1999999 + 2 + + + 2000000-6599999 + 3 + + + 6600000-6899999 + 4 + + + 6900000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-9299999 + 5 + + + 9300000-9399999 + 2 + + + 9400000-9799999 + 4 + + + 9800000-9999999 + 5 + + + + + 978-961 + Slovenia + + + 0000000-1999999 + 2 + + + 2000000-5999999 + 3 + + + 6000000-8999999 + 4 + + + 9000000-9799999 + 5 + + + 9800000-9999999 + 0 + + + + + 978-962 + Hong Kong, China + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8699999 + 5 + + + 8700000-8999999 + 4 + + + 9000000-9999999 + 3 + + + + + 978-963 + Hungary + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9999999 + 4 + + + + + 978-964 + Iran + + + 0000000-1499999 + 2 + + + 1500000-2499999 + 3 + + + 2500000-2999999 + 4 + + + 3000000-5499999 + 3 + + + 5500000-8999999 + 4 + + + 9000000-9699999 + 5 + + + 9700000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-965 + Israel + + + 0000000-1999999 + 2 + + + 2000000-5999999 + 3 + + + 6000000-6999999 + 0 + + + 7000000-7999999 + 4 + + + 8000000-8999999 + 0 + + + 9000000-9999999 + 5 + + + + + 978-966 + Ukraine + + + 0000000-1299999 + 2 + + + 1300000-1399999 + 3 + + + 1400000-1499999 + 2 + + + 1500000-1699999 + 4 + + + 1700000-1999999 + 3 + + + 2000000-2789999 + 4 + + + 2790000-2899999 + 3 + + + 2900000-2999999 + 4 + + + 3000000-6999999 + 3 + + + 7000000-8999999 + 4 + + + 9000000-9099999 + 5 + + + 9100000-9499999 + 3 + + + 9500000-9799999 + 5 + + + 9800000-9999999 + 3 + + + + + 978-967 + Malaysia + + + 0000000-0999999 + 4 + + + 1000000-1999999 + 5 + + + 2000000-2499999 + 4 + + + 2500000-2549999 + 3 + + + 2550000-2699999 + 5 + + + 2700000-2799999 + 4 + + + 2800000-2999999 + 4 + + + 3000000-4999999 + 3 + + + 5000000-5999999 + 4 + + + 6000000-8999999 + 2 + + + 9000000-9899999 + 3 + + + 9900000-9989999 + 4 + + + 9990000-9999999 + 5 + + + + + 978-968 + Mexico + + + 0100000-3999999 + 2 + + + 4000000-4999999 + 3 + + + 5000000-7999999 + 4 + + + 8000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-969 + Pakistan + + + 0000000-1999999 + 1 + + + 2000000-2099999 + 2 + + + 2100000-2199999 + 3 + + + 2200000-2299999 + 4 + + + 2300000-2399999 + 5 + + + 2400000-3999999 + 2 + + + 4000000-7499999 + 3 + + + 7500000-9999999 + 4 + + + + + 978-970 + Mexico + + + 0100000-5999999 + 2 + + + 6000000-8999999 + 3 + + + 9000000-9099999 + 4 + + + 9100000-9699999 + 5 + + + 9700000-9999999 + 4 + + + + + 978-971 + Philippines + + + 0000000-0159999 + 3 + + + 0160000-0199999 + 4 + + + 0200000-0299999 + 2 + + + 0300000-0599999 + 4 + + + 0600000-4999999 + 2 + + + 5000000-8499999 + 3 + + + 8500000-9099999 + 4 + + + 9100000-9599999 + 5 + + + 9600000-9699999 + 4 + + + 9700000-9899999 + 2 + + + 9900000-9999999 + 4 + + + + + 978-972 + Portugal + + + 0000000-1999999 + 1 + + + 2000000-5499999 + 2 + + + 5500000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-973 + Romania + + + 0000000-0999999 + 1 + + + 1000000-1699999 + 3 + + + 1700000-1999999 + 4 + + + 2000000-5499999 + 2 + + + 5500000-7599999 + 3 + + + 7600000-8499999 + 4 + + + 8500000-8899999 + 5 + + + 8900000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-974 + Thailand + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8499999 + 4 + + + 8500000-8999999 + 5 + + + 9000000-9499999 + 5 + + + 9500000-9999999 + 4 + + + + + 978-975 + Turkey + + + 0000000-0199999 + 5 + + + 0200000-2399999 + 2 + + + 2400000-2499999 + 4 + + + 2500000-5999999 + 3 + + + 6000000-9199999 + 4 + + + 9200000-9899999 + 5 + + + 9900000-9999999 + 3 + + + + + 978-976 + Caribbean Community + + + 0000000-3999999 + 1 + + + 4000000-5999999 + 2 + + + 6000000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-977 + Egypt + + + 0000000-1999999 + 2 + + + 2000000-4999999 + 3 + + + 5000000-6999999 + 4 + + + 7000000-8499999 + 3 + + + 8500000-8929999 + 5 + + + 8930000-8949999 + 3 + + + 8950000-8999999 + 4 + + + 9000000-9899999 + 2 + + + 9900000-9999999 + 3 + + + + + 978-978 + Nigeria + + + 0000000-1999999 + 3 + + + 2000000-2999999 + 4 + + + 3000000-7799999 + 5 + + + 7800000-7999999 + 3 + + + 8000000-8999999 + 4 + + + 9000000-9999999 + 3 + + + + + 978-979 + Indonesia + + + 0000000-0999999 + 3 + + + 1000000-1499999 + 4 + + + 1500000-1999999 + 5 + + + 2000000-2999999 + 2 + + + 3000000-3999999 + 4 + + + 4000000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-980 + Venezuela + + + 0000000-1999999 + 2 + + + 2000000-5999999 + 3 + + + 6000000-9999999 + 4 + + + + + 978-981 + Singapore + + + 0000000-1699999 + 2 + + + 1700000-1799999 + 5 + + + 1800000-1999999 + 2 + + + 2000000-2999999 + 3 + + + 3000000-3099999 + 4 + + + 3100000-3999999 + 3 + + + 4000000-9499999 + 4 + + + 9500000-9899999 + 0 + + + 9900000-9999999 + 2 + + + + + 978-982 + South Pacific + + + 0000000-0999999 + 2 + + + 1000000-6999999 + 3 + + + 7000000-8999999 + 2 + + + 9000000-9799999 + 4 + + + 9800000-9999999 + 5 + + + + + 978-983 + Malaysia + + + 0000000-0199999 + 2 + + + 0200000-1999999 + 3 + + + 2000000-3999999 + 4 + + + 4000000-4499999 + 5 + + + 4500000-4999999 + 2 + + + 5000000-7999999 + 2 + + + 8000000-8999999 + 3 + + + 9000000-9899999 + 4 + + + 9900000-9999999 + 5 + + + + + 978-984 + Bangladesh + + + 0000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-8999999 + 4 + + + 9000000-9999999 + 5 + + + + + 978-985 + Belarus + + + 0000000-3999999 + 2 + + + 4000000-5999999 + 3 + + + 6000000-8799999 + 4 + + + 8800000-8999999 + 3 + + + 9000000-9999999 + 5 + + + + + 978-986 + Taiwan + + + 0000000-0599999 + 2 + + + 0600000-0699999 + 5 + + + 0700000-0799999 + 4 + + + 0800000-1199999 + 2 + + + 1200000-5399999 + 3 + + + 5400000-7999999 + 4 + + + 8000000-9999999 + 5 + + + + + 978-987 + Argentina + + + 0000000-0999999 + 2 + + + 1000000-1999999 + 4 + + + 2000000-2999999 + 5 + + + 3000000-3599999 + 2 + + + 3600000-4199999 + 4 + + + 4200000-4399999 + 2 + + + 4400000-4499999 + 4 + + + 4500000-4899999 + 5 + + + 4900000-4999999 + 4 + + + 5000000-8249999 + 3 + + + 8250000-8279999 + 4 + + + 8280000-8299999 + 5 + + + 8300000-8499999 + 4 + + + 8500000-8899999 + 2 + + + 8900000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-988 + Hong Kong, China + + + 0000000-1199999 + 2 + + + 1200000-1999999 + 5 + + + 2000000-6999999 + 3 + + + 7000000-7999999 + 5 + + + 8000000-9699999 + 4 + + + 9700000-9999999 + 5 + + + + + 978-989 + Portugal + + + 0000000-1999999 + 1 + + + 2000000-3499999 + 2 + + + 3500000-3699999 + 5 + + + 3700000-5299999 + 2 + + + 5300000-5499999 + 5 + + + 5500000-7999999 + 3 + + + 8000000-9499999 + 4 + + + 9500000-9999999 + 5 + + + + + 978-9910 + Uzbekistan + + + 0000000-7299999 + 0 + + + 7300000-7499999 + 3 + + + 7500000-9649999 + 0 + + + 9650000-9999999 + 4 + + + + + 978-9911 + Montenegro + + + 0000000-1999999 + 0 + + + 2000000-2499999 + 2 + + + 2500000-5499999 + 0 + + + 5500000-7499999 + 3 + + + 7500000-9999999 + 0 + + + + + 978-9912 + Tanzania + + + 0000000-3999999 + 0 + + + 4000000-4499999 + 2 + + + 4500000-7499999 + 0 + + + 7500000-7999999 + 3 + + + 8000000-9799999 + 0 + + + 9800000-9999999 + 4 + + + + + 978-9913 + Uganda + + + 0000000-0799999 + 2 + + + 0800000-5999999 + 0 + + + 6000000-6999999 + 3 + + + 7000000-9549999 + 0 + + + 9550000-9999999 + 4 + + + + + 978-9914 + Kenya + + + 0000000-3999999 + 0 + + + 4000000-5299999 + 2 + + + 5300000-6999999 + 0 + + + 7000000-7749999 + 3 + + + 7750000-9599999 + 0 + + + 9600000-9999999 + 4 + + + + + 978-9915 + Uruguay + + + 0000000-3999999 + 0 + + + 4000000-5999999 + 2 + + + 6000000-6499999 + 0 + + + 6500000-7999999 + 3 + + + 8000000-9299999 + 0 + + + 9300000-9999999 + 4 + + + + + 978-9916 + Estonia + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-5999999 + 1 + + + 6000000-7999999 + 3 + + + 8000000-8499999 + 2 + + + 8500000-8999999 + 3 + + + 9000000-9249999 + 0 + + + 9250000-9999999 + 4 + + + + + 978-9917 + Bolivia + + + 0000000-0999999 + 1 + + + 1000000-2999999 + 0 + + + 3000000-3499999 + 2 + + + 3500000-5999999 + 0 + + + 6000000-6999999 + 3 + + + 7000000-9799999 + 0 + + + 9800000-9999999 + 4 + + + + + 978-9918 + Malta + + + 0000000-0999999 + 1 + + + 1000000-1999999 + 0 + + + 2000000-2999999 + 2 + + + 3000000-5999999 + 0 + + + 6000000-7999999 + 3 + + + 8000000-9499999 + 0 + + + 9500000-9999999 + 4 + + + + + 978-9919 + Mongolia + + + 0000000-0999999 + 1 + + + 1000000-1999999 + 0 + + + 2000000-2999999 + 2 + + + 3000000-4999999 + 0 + + + 5000000-5999999 + 3 + + + 6000000-8999999 + 0 + + + 9000000-9999999 + 4 + + + + + 978-9920 + Morocco + + + 0000000-2999999 + 0 + + + 3000000-4299999 + 2 + + + 4300000-4999999 + 0 + + + 5000000-7999999 + 3 + + + 8000000-8749999 + 0 + + + 8750000-9999999 + 4 + + + + + 978-9921 + Kuwait + + + 0000000-0999999 + 1 + + + 1000000-2999999 + 0 + + + 3000000-3999999 + 2 + + + 4000000-6999999 + 0 + + + 7000000-8999999 + 3 + + + 9000000-9699999 + 0 + + + 9700000-9999999 + 4 + + + + + 978-9922 + Iraq + + + 0000000-1999999 + 0 + + + 2000000-2999999 + 2 + + + 3000000-5999999 + 0 + + + 6000000-7999999 + 3 + + + 8000000-8499999 + 0 + + + 8500000-9999999 + 4 + + + + + 978-9923 + Jordan + + + 0000000-0999999 + 1 + + + 1000000-5999999 + 2 + + + 6000000-6999999 + 0 + + + 7000000-8999999 + 3 + + + 9000000-9399999 + 0 + + + 9400000-9999999 + 4 + + + + + 978-9924 + Cambodia + + + 0000000-2999999 + 0 + + + 3000000-3999999 + 2 + + + 4000000-4999999 + 0 + + + 5000000-6499999 + 3 + + + 6500000-8999999 + 0 + + + 9000000-9999999 + 4 + + + + + 978-9925 + Cyprus + + + 0000000-2999999 + 1 + + + 3000000-5499999 + 2 + + + 5500000-7349999 + 3 + + + 7350000-9999999 + 4 + + + + + 978-9926 + Bosnia and Herzegovina + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9927 + Qatar + + + 0000000-0999999 + 2 + + + 1000000-3999999 + 3 + + + 4000000-4999999 + 4 + + + 5000000-9999999 + 0 + + + + + 978-9928 + Albania + + + 0000000-0999999 + 2 + + + 1000000-3999999 + 3 + + + 4000000-4999999 + 4 + + + 5000000-7999999 + 0 + + + 8000000-8999999 + 3 + + + 9000000-9999999 + 2 + + + + + 978-9929 + Guatemala + + + 0000000-3999999 + 1 + + + 4000000-5499999 + 2 + + + 5500000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9930 + Costa Rica + + + 0000000-4999999 + 2 + + + 5000000-9399999 + 3 + + + 9400000-9999999 + 4 + + + + + 978-9931 + Algeria + + + 0000000-2399999 + 2 + + + 2400000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9932 + Lao People's Democratic Republic + + + 0000000-3999999 + 2 + + + 4000000-8499999 + 3 + + + 8500000-9999999 + 4 + + + + + 978-9933 + Syria + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9934 + Latvia + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 2 + + + 5000000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9935 + Iceland + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9936 + Afghanistan + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9937 + Nepal + + + 0000000-2999999 + 1 + + + 3000000-4999999 + 2 + + + 5000000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9938 + Tunisia + + + 0000000-7999999 + 2 + + + 8000000-9499999 + 3 + + + 9500000-9749999 + 4 + + + 9750000-9909999 + 3 + + + 9910000-9999999 + 4 + + + + + 978-9939 + Armenia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-8999999 + 3 + + + 9000000-9599999 + 4 + + + 9600000-9799999 + 3 + + + 9800000-9999999 + 2 + + + + + 978-9940 + Montenegro + + + 0000000-1999999 + 1 + + + 2000000-4999999 + 2 + + + 5000000-8399999 + 3 + + + 8400000-8699999 + 2 + + + 8700000-9999999 + 4 + + + + + 978-9941 + Georgia + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-8999999 + 1 + + + 9000000-9999999 + 4 + + + + + 978-9942 + Ecuador + + + 0000000-5999999 + 2 + + + 6000000-6999999 + 3 + + + 7000000-7499999 + 4 + + + 7500000-8499999 + 3 + + + 8500000-8999999 + 4 + + + 9000000-9849999 + 3 + + + 9850000-9999999 + 4 + + + + + 978-9943 + Uzbekistan + + + 0000000-2999999 + 2 + + + 3000000-3999999 + 3 + + + 4000000-9749999 + 4 + + + 9750000-9999999 + 3 + + + + + 978-9944 + Turkey + + + 0000000-0999999 + 4 + + + 1000000-4999999 + 3 + + + 5000000-5999999 + 4 + + + 6000000-6999999 + 2 + + + 7000000-7999999 + 3 + + + 8000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-9945 + Dominican Republic + + + 0000000-0099999 + 2 + + + 0100000-0799999 + 3 + + + 0800000-3999999 + 2 + + + 4000000-5699999 + 3 + + + 5700000-5799999 + 2 + + + 5800000-7999999 + 3 + + + 8000000-8099999 + 2 + + + 8100000-8499999 + 3 + + + 8500000-9999999 + 4 + + + + + 978-9946 + Korea, P.D.R. + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9947 + Algeria + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-9948 + United Arab Emirates + + + 0000000-3999999 + 2 + + + 4000000-8499999 + 3 + + + 8500000-9999999 + 4 + + + + + 978-9949 + Estonia + + + 0000000-0899999 + 2 + + + 0900000-0999999 + 3 + + + 1000000-3999999 + 2 + + + 4000000-6999999 + 3 + + + 7000000-7199999 + 2 + + + 7200000-7499999 + 4 + + + 7500000-8999999 + 2 + + + 9000000-9999999 + 4 + + + + + 978-9950 + Palestine + + + 0000000-2999999 + 2 + + + 3000000-8499999 + 3 + + + 8500000-9999999 + 4 + + + + + 978-9951 + Kosova + + + 0000000-3899999 + 2 + + + 3900000-8499999 + 3 + + + 8500000-9799999 + 4 + + + 9800000-9999999 + 3 + + + + + 978-9952 + Azerbaijan + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9999999 + 4 + + + + + 978-9953 + Lebanon + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-5999999 + 3 + + + 6000000-8999999 + 2 + + + 9000000-9299999 + 4 + + + 9300000-9699999 + 2 + + + 9700000-9999999 + 3 + + + + + 978-9954 + Morocco + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 2 + + + 4000000-7999999 + 3 + + + 8000000-9899999 + 4 + + + 9900000-9999999 + 2 + + + + + 978-9955 + Lithuania + + + 0000000-3999999 + 2 + + + 4000000-9299999 + 3 + + + 9300000-9999999 + 4 + + + + + 978-9956 + Cameroon + + + 0000000-0999999 + 1 + + + 1000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9957 + Jordan + + + 0000000-3999999 + 2 + + + 4000000-6499999 + 3 + + + 6500000-6799999 + 2 + + + 6800000-6999999 + 3 + + + 7000000-8499999 + 2 + + + 8500000-8799999 + 4 + + + 8800000-9999999 + 2 + + + + + 978-9958 + Bosnia and Herzegovina + + + 0000000-0199999 + 2 + + + 0200000-0299999 + 3 + + + 0300000-0399999 + 4 + + + 0400000-0899999 + 3 + + + 0900000-0999999 + 4 + + + 1000000-1899999 + 2 + + + 1900000-1999999 + 4 + + + 2000000-4999999 + 2 + + + 5000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9959 + Libya + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9499999 + 3 + + + 9500000-9699999 + 4 + + + 9700000-9799999 + 3 + + + 9800000-9999999 + 2 + + + + + 978-9960 + Saudi Arabia + + + 0000000-5999999 + 2 + + + 6000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9961 + Algeria + + + 0000000-2999999 + 1 + + + 3000000-6999999 + 2 + + + 7000000-9499999 + 3 + + + 9500000-9999999 + 4 + + + + + 978-9962 + Panama + + + 0000000-5499999 + 2 + + + 5500000-5599999 + 4 + + + 5600000-5999999 + 2 + + + 6000000-8499999 + 3 + + + 8500000-9999999 + 4 + + + + + 978-9963 + Cyprus + + + 0000000-1999999 + 1 + + + 2000000-2499999 + 4 + + + 2500000-2799999 + 3 + + + 2800000-2999999 + 4 + + + 3000000-5499999 + 2 + + + 5500000-7349999 + 3 + + + 7350000-7499999 + 4 + + + 7500000-9999999 + 4 + + + + + 978-9964 + Ghana + + + 0000000-6999999 + 1 + + + 7000000-9499999 + 2 + + + 9500000-9999999 + 3 + + + + + 978-9965 + Kazakhstan + + + 0000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9966 + Kenya + + + 0000000-1399999 + 3 + + + 1400000-1499999 + 2 + + + 1500000-1999999 + 4 + + + 2000000-6999999 + 2 + + + 7000000-7499999 + 4 + + + 7500000-8209999 + 3 + + + 8210000-8249999 + 4 + + + 8250000-8259999 + 3 + + + 8260000-8289999 + 4 + + + 8290000-9599999 + 3 + + + 9600000-9999999 + 4 + + + + + 978-9967 + Kyrgyz Republic + + + 0000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9968 + Costa Rica + + + 0000000-4999999 + 2 + + + 5000000-9399999 + 3 + + + 9400000-9999999 + 4 + + + + + 978-9969 + Algeria + + + 0000000-0699999 + 2 + + + 0700000-4999999 + 0 + + + 5000000-6499999 + 3 + + + 6500000-9699999 + 0 + + + 9700000-9999999 + 4 + + + + + 978-9970 + Uganda + + + 0000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9971 + Singapore + + + 0000000-5999999 + 1 + + + 6000000-8999999 + 2 + + + 9000000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9972 + Peru + + + 0000000-0999999 + 2 + + + 1000000-1999999 + 1 + + + 2000000-2499999 + 3 + + + 2500000-2999999 + 4 + + + 3000000-5999999 + 2 + + + 6000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9973 + Tunisia + + + 0000000-0599999 + 2 + + + 0600000-0899999 + 3 + + + 0900000-0999999 + 4 + + + 1000000-6999999 + 2 + + + 7000000-9699999 + 3 + + + 9700000-9999999 + 4 + + + + + 978-9974 + Uruguay + + + 0000000-2999999 + 1 + + + 3000000-5499999 + 2 + + + 5500000-7499999 + 3 + + + 7500000-8799999 + 4 + + + 8800000-9099999 + 3 + + + 9100000-9499999 + 2 + + + 9500000-9999999 + 2 + + + + + 978-9975 + Moldova + + + 0000000-0999999 + 1 + + + 1000000-2999999 + 3 + + + 3000000-3999999 + 4 + + + 4000000-4499999 + 4 + + + 4500000-8999999 + 2 + + + 9000000-9499999 + 3 + + + 9500000-9999999 + 4 + + + + + 978-9976 + Tanzania + + + 0000000-4999999 + 1 + + + 5000000-5799999 + 4 + + + 5800000-5899999 + 3 + + + 5900000-8999999 + 2 + + + 9000000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9977 + Costa Rica + + + 0000000-8999999 + 2 + + + 9000000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9978 + Ecuador + + + 0000000-2999999 + 2 + + + 3000000-3999999 + 3 + + + 4000000-9499999 + 2 + + + 9500000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9979 + Iceland + + + 0000000-4999999 + 1 + + + 5000000-6499999 + 2 + + + 6500000-6599999 + 3 + + + 6600000-7599999 + 2 + + + 7600000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9980 + Papua New Guinea + + + 0000000-3999999 + 1 + + + 4000000-8999999 + 2 + + + 9000000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9981 + Morocco + + + 0000000-0999999 + 2 + + + 1000000-1599999 + 3 + + + 1600000-1999999 + 4 + + + 2000000-7999999 + 2 + + + 8000000-9499999 + 3 + + + 9500000-9999999 + 4 + + + + + 978-9982 + Zambia + + + 0000000-7999999 + 2 + + + 8000000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9983 + Gambia + + + 0000000-7999999 + 0 + + + 8000000-9499999 + 2 + + + 9500000-9899999 + 3 + + + 9900000-9999999 + 4 + + + + + 978-9984 + Latvia + + + 0000000-4999999 + 2 + + + 5000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9985 + Estonia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-8999999 + 3 + + + 9000000-9999999 + 4 + + + + + 978-9986 + Lithuania + + + 0000000-3999999 + 2 + + + 4000000-8999999 + 3 + + + 9000000-9399999 + 4 + + + 9400000-9699999 + 3 + + + 9700000-9999999 + 2 + + + + + 978-9987 + Tanzania + + + 0000000-3999999 + 2 + + + 4000000-8799999 + 3 + + + 8800000-9999999 + 4 + + + + + 978-9988 + Ghana + + + 0000000-3999999 + 1 + + + 4000000-5499999 + 2 + + + 5500000-7499999 + 3 + + + 7500000-9999999 + 4 + + + + + 978-9989 + North Macedonia + + + 0000000-0999999 + 1 + + + 1000000-1999999 + 3 + + + 2000000-2999999 + 4 + + + 3000000-5999999 + 2 + + + 6000000-9499999 + 3 + + + 9500000-9999999 + 4 + + + + + 978-99901 + Bahrain + + + 0000000-4999999 + 2 + + + 5000000-7999999 + 3 + + + 8000000-9999999 + 2 + + + + + 978-99902 + Reserved Agency + + + 0000000-9999999 + 0 + + + + + 978-99903 + Mauritius + + + 0000000-1999999 + 1 + + + 2000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99904 + Curaçao + + + 0000000-5999999 + 1 + + + 6000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99905 + Bolivia + + + 0000000-3999999 + 1 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99906 + Kuwait + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-6999999 + 3 + + + 7000000-8999999 + 2 + + + 9000000-9499999 + 2 + + + 9500000-9999999 + 3 + + + + + 978-99908 + Malawi + + + 0000000-0999999 + 1 + + + 1000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99909 + Malta + + + 0000000-3999999 + 1 + + + 4000000-9499999 + 2 + + + 9500000-9999999 + 3 + + + + + 978-99910 + Sierra Leone + + + 0000000-2999999 + 1 + + + 3000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99911 + Lesotho + + + 0000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99912 + Botswana + + + 0000000-3999999 + 1 + + + 4000000-5999999 + 3 + + + 6000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99913 + Andorra + + + 0000000-2999999 + 1 + + + 3000000-3599999 + 2 + + + 3600000-5999999 + 0 + + + 6000000-6049999 + 3 + + + 6050000-9999999 + 0 + + + + + 978-99914 + International NGO Publishers + + + 0000000-4999999 + 1 + + + 5000000-6999999 + 2 + + + 7000000-7999999 + 1 + + + 8000000-8699999 + 2 + + + 8700000-8799999 + 3 + + + 8800000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99915 + Maldives + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99916 + Namibia + + + 0000000-2999999 + 1 + + + 3000000-6999999 + 2 + + + 7000000-9999999 + 3 + + + + + 978-99917 + Brunei Darussalam + + + 0000000-2999999 + 1 + + + 3000000-8899999 + 2 + + + 8900000-9999999 + 3 + + + + + 978-99918 + Faroe Islands + + + 0000000-3999999 + 1 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99919 + Benin + + + 0000000-2999999 + 1 + + + 3000000-3999999 + 3 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99920 + Andorra + + + 0000000-4999999 + 1 + + + 5000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99921 + Qatar + + + 0000000-1999999 + 1 + + + 2000000-6999999 + 2 + + + 7000000-7999999 + 3 + + + 8000000-8999999 + 1 + + + 9000000-9999999 + 2 + + + + + 978-99922 + Guatemala + + + 0000000-3999999 + 1 + + + 4000000-6999999 + 2 + + + 7000000-9999999 + 3 + + + + + 978-99923 + El Salvador + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99924 + Nicaragua + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99925 + Paraguay + + + 0000000-0999999 + 1 + + + 1000000-1999999 + 2 + + + 2000000-2999999 + 3 + + + 3000000-3999999 + 1 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99926 + Honduras + + + 0000000-0999999 + 1 + + + 1000000-5999999 + 2 + + + 6000000-8699999 + 3 + + + 8700000-8999999 + 2 + + + 9000000-9999999 + 2 + + + + + 978-99927 + Albania + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99928 + Georgia + + + 0000000-0999999 + 1 + + + 1000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99929 + Mongolia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99930 + Armenia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99931 + Seychelles + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99932 + Malta + + + 0000000-0999999 + 1 + + + 1000000-5999999 + 2 + + + 6000000-6999999 + 3 + + + 7000000-7999999 + 1 + + + 8000000-9999999 + 2 + + + + + 978-99933 + Nepal + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99934 + Dominican Republic + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99935 + Haiti + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-6999999 + 3 + + + 7000000-8999999 + 1 + + + 9000000-9999999 + 2 + + + + + 978-99936 + Bhutan + + + 0000000-0999999 + 1 + + + 1000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99937 + Macau + + + 0000000-1999999 + 1 + + + 2000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99938 + Srpska, Republic of + + + 0000000-1999999 + 1 + + + 2000000-5999999 + 2 + + + 6000000-8999999 + 3 + + + 9000000-9999999 + 2 + + + + + 978-99939 + Guatemala + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99940 + Georgia + + + 0000000-0999999 + 1 + + + 1000000-6999999 + 2 + + + 7000000-9999999 + 3 + + + + + 978-99941 + Armenia + + + 0000000-2999999 + 1 + + + 3000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99942 + Sudan + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99943 + Albania + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99944 + Ethiopia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99945 + Namibia + + + 0000000-4999999 + 1 + + + 5000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99946 + Nepal + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99947 + Tajikistan + + + 0000000-2999999 + 1 + + + 3000000-6999999 + 2 + + + 7000000-9999999 + 3 + + + + + 978-99948 + Eritrea + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99949 + Mauritius + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-8999999 + 1 + + + 9000000-9899999 + 3 + + + 9900000-9999999 + 2 + + + + + 978-99950 + Cambodia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99951 + Reserved Agency + + + 0000000-9999999 + 0 + + + + + 978-99952 + Mali + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99953 + Paraguay + + + 0000000-2999999 + 1 + + + 3000000-7999999 + 2 + + + 8000000-9399999 + 3 + + + 9400000-9999999 + 2 + + + + + 978-99954 + Bolivia + + + 0000000-2999999 + 1 + + + 3000000-6999999 + 2 + + + 7000000-8799999 + 3 + + + 8800000-9999999 + 2 + + + + + 978-99955 + Srpska, Republic of + + + 0000000-1999999 + 1 + + + 2000000-5999999 + 2 + + + 6000000-7999999 + 3 + + + 8000000-9999999 + 2 + + + + + 978-99956 + Albania + + + 0000000-5999999 + 2 + + + 6000000-8599999 + 3 + + + 8600000-9999999 + 2 + + + + + 978-99957 + Malta + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9499999 + 3 + + + 9500000-9999999 + 2 + + + + + 978-99958 + Bahrain + + + 0000000-4999999 + 1 + + + 5000000-9399999 + 2 + + + 9400000-9499999 + 3 + + + 9500000-9999999 + 3 + + + + + 978-99959 + Luxembourg + + + 0000000-2999999 + 1 + + + 3000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99960 + Malawi + + + 0000000-0699999 + 0 + + + 0700000-0999999 + 3 + + + 1000000-9499999 + 2 + + + 9500000-9999999 + 3 + + + + + 978-99961 + El Salvador + + + 0000000-2999999 + 1 + + + 3000000-3699999 + 3 + + + 3700000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99962 + Mongolia + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99963 + Cambodia + + + 0000000-4999999 + 2 + + + 5000000-9199999 + 3 + + + 9200000-9999999 + 2 + + + + + 978-99964 + Nicaragua + + + 0000000-1999999 + 1 + + + 2000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99965 + Macau + + + 0000000-2999999 + 1 + + + 3000000-3599999 + 3 + + + 3600000-6299999 + 2 + + + 6300000-9999999 + 3 + + + + + 978-99966 + Kuwait + + + 0000000-2999999 + 1 + + + 3000000-6999999 + 2 + + + 7000000-7999999 + 3 + + + 8000000-9699999 + 2 + + + 9700000-9999999 + 3 + + + + + 978-99967 + Paraguay + + + 0000000-0999999 + 1 + + + 1000000-5999999 + 2 + + + 6000000-9999999 + 3 + + + + + 978-99968 + Botswana + + + 0000000-3999999 + 1 + + + 4000000-5999999 + 3 + + + 6000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99969 + Oman + + + 0000000-4999999 + 1 + + + 5000000-7999999 + 2 + + + 8000000-9499999 + 3 + + + 9500000-9999999 + 2 + + + + + 978-99970 + Haiti + + + 0000000-4999999 + 1 + + + 5000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99971 + Myanmar + + + 0000000-3999999 + 1 + + + 4000000-8499999 + 2 + + + 8500000-9999999 + 3 + + + + + 978-99972 + Faroe Islands + + + 0000000-4999999 + 1 + + + 5000000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99973 + Mongolia + + + 0000000-3999999 + 1 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99974 + Bolivia + + + 0000000-0999999 + 1 + + + 1000000-2599999 + 2 + + + 2600000-3999999 + 3 + + + 4000000-6399999 + 2 + + + 6400000-6499999 + 3 + + + 6500000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99975 + Tajikistan + + + 0000000-2999999 + 1 + + + 3000000-3999999 + 3 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99976 + Srpska, Republic of + + + 0000000-0999999 + 1 + + + 1000000-1599999 + 2 + + + 1600000-1999999 + 3 + + + 2000000-5999999 + 2 + + + 6000000-8199999 + 3 + + + 8200000-8999999 + 2 + + + 9000000-9999999 + 3 + + + + + 978-99977 + Rwanda + + + 0000000-1999999 + 1 + + + 2000000-3999999 + 0 + + + 4000000-6999999 + 2 + + + 7000000-7999999 + 3 + + + 8000000-9749999 + 0 + + + 9750000-9999999 + 3 + + + + + 978-99978 + Mongolia + + + 0000000-4999999 + 1 + + + 5000000-6999999 + 2 + + + 7000000-9999999 + 3 + + + + + 978-99979 + Honduras + + + 0000000-3999999 + 1 + + + 4000000-7999999 + 2 + + + 8000000-9999999 + 3 + + + + + 978-99980 + Bhutan + + + 0000000-0999999 + 1 + + + 1000000-2999999 + 0 + + + 3000000-5999999 + 2 + + + 6000000-7499999 + 0 + + + 7500000-9999999 + 3 + + + + + 978-99981 + Macau + + + 0000000-1999999 + 1 + + + 2000000-2699999 + 0 + + + 2700000-7499999 + 2 + + + 7500000-9999999 + 3 + + + + + 978-99982 + Benin + + + 0000000-1999999 + 1 + + + 2000000-4999999 + 0 + + + 5000000-6899999 + 2 + + + 6900000-8999999 + 0 + + + 9000000-9999999 + 3 + + + + + 978-99983 + El Salvador + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-6999999 + 2 + + + 7000000-9499999 + 0 + + + 9500000-9999999 + 3 + + + + + 978-99984 + Brunei Darussalam + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-6999999 + 2 + + + 7000000-9499999 + 0 + + + 9500000-9999999 + 3 + + + + + 978-99985 + Tajikistan + + + 0000000-1999999 + 1 + + + 2000000-3499999 + 0 + + + 3500000-7999999 + 2 + + + 8000000-8499999 + 0 + + + 8500000-9999999 + 3 + + + + + 978-99986 + Myanmar + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-6999999 + 2 + + + 7000000-9499999 + 0 + + + 9500000-9999999 + 3 + + + + + 978-99987 + Luxembourg + + + 0000000-6999999 + 0 + + + 7000000-9999999 + 3 + + + + + 978-99988 + Sudan + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-5499999 + 2 + + + 5500000-7999999 + 0 + + + 8000000-8249999 + 3 + + + 8250000-9999999 + 0 + + + + + 978-99989 + Paraguay + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-6499999 + 2 + + + 6500000-8999999 + 0 + + + 9000000-9999999 + 3 + + + + + 978-99990 + Ethiopia + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-5499999 + 2 + + + 5500000-9749999 + 0 + + + 9750000-9999999 + 3 + + + + + 978-99992 + Oman + + + 0000000-1999999 + 1 + + + 2000000-4999999 + 0 + + + 5000000-6499999 + 2 + + + 6500000-9499999 + 0 + + + 9500000-9999999 + 3 + + + + + 978-99993 + Mauritius + + + 0000000-0999999 + 1 + + + 1000000-4999999 + 0 + + + 5000000-5499999 + 2 + + + 5500000-9799999 + 0 + + + 9800000-9999999 + 3 + + + + + 979-10 + France + + + 0000000-1999999 + 2 + + + 2000000-6999999 + 3 + + + 7000000-8999999 + 4 + + + 9000000-9759999 + 5 + + + 9760000-9999999 + 6 + + + + + 979-11 + Korea, Republic + + + 0000000-2499999 + 2 + + + 2500000-5499999 + 3 + + + 5500000-8499999 + 4 + + + 8500000-9499999 + 5 + + + 9500000-9999999 + 6 + + + + + 979-12 + Italy + + + 0000000-1999999 + 0 + + + 2000000-2999999 + 3 + + + 3000000-5449999 + 0 + + + 5450000-5999999 + 4 + + + 6000000-7999999 + 0 + + + 8000000-8499999 + 5 + + + 8500000-9999999 + 0 + + + + + 979-8 + United States + + + 0000000-1999999 + 0 + + + 2000000-2299999 + 3 + + + 2300000-3499999 + 0 + + + 3500000-3999999 + 4 + + + 4000000-8499999 + 4 + + + 8500000-8849999 + 4 + + + 8850000-8999999 + 5 + + + 9000000-9849999 + 0 + + + 9850000-9899999 + 7 + + + 9900000-9999999 + 0 + + + + + diff --git a/bookwyrm/isbn/__init__.py b/bookwyrm/isbn/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/bookwyrm/isbn/isbn.py b/bookwyrm/isbn/isbn.py new file mode 100644 index 000000000..4c3ba496b --- /dev/null +++ b/bookwyrm/isbn/isbn.py @@ -0,0 +1,71 @@ +import os +import requests + +from xml.etree import ElementTree +from bookwyrm import settings + + +class IsbnHyphenator: + __range_message_url = "https://www.isbn-international.org/export_rangemessage.xml" + __range_file_path = os.path.join( + settings.BASE_DIR, "bookwyrm", "isbn", "RangeMessage.xml" + ) + __element_tree = None + + def update_range_message(self): + response = requests.get(self.__range_message_url) + with open(self.__range_file_path, "w", encoding="utf-8") as file: + file.write(response.text) + self.__element_tree = None + + def hyphenate(self, isbn_13): + if self.__element_tree is None: + self.__element_tree = ElementTree.parse(self.__range_file_path) + gs1_prefix = isbn_13[:3] + reg_group = self.__find_reg_group(isbn_13, gs1_prefix) + if reg_group is None: + return isbn_13 # failed to hyphenate + registrant = self.__find_registrant(isbn_13, gs1_prefix, reg_group) + if registrant is None: + return isbn_13 # failed to hyphenate + publication = isbn_13[len(gs1_prefix) + len(reg_group) + len(registrant) : -1] + check_digit = isbn_13[-1:] + return "-".join((gs1_prefix, reg_group, registrant, publication, check_digit)) + + def __find_reg_group(self, isbn_13, gs1_prefix): + for ean_ucc_el in self.__element_tree.find("EAN.UCCPrefixes").findall( + "EAN.UCC" + ): + if ean_ucc_el.find("Prefix").text == gs1_prefix: + for rule_el in ean_ucc_el.find("Rules").findall("Rule"): + length = int(rule_el.find("Length").text) + if length == 0: + continue + range = [ + int(x[:length]) for x in rule_el.find("Range").text.split("-") + ] + reg_group = isbn_13[len(gs1_prefix) : len(gs1_prefix) + length] + if range[0] <= int(reg_group) <= range[1]: + return reg_group + return None + return None + + def __find_registrant(self, isbn_13, gs1_prefix, reg_group): + from_ind = len(gs1_prefix) + len(reg_group) + for group_el in self.__element_tree.find("RegistrationGroups").findall("Group"): + if group_el.find("Prefix").text == "-".join((gs1_prefix, reg_group)): + for rule_el in group_el.find("Rules").findall("Rule"): + length = int(rule_el.find("Length").text) + if length == 0: + continue + range = [ + int(x[:length]) for x in rule_el.find("Range").text.split("-") + ] + registrant = isbn_13[from_ind : from_ind + length] + if range[0] <= int(registrant) <= range[1]: + return registrant + return None + return None + + +hyphenator_singleton = IsbnHyphenator() diff --git a/bookwyrm/static/css/bookwyrm/components/_copy.scss b/bookwyrm/static/css/bookwyrm/components/_copy.scss index e0c4246e6..7a47c1dba 100644 --- a/bookwyrm/static/css/bookwyrm/components/_copy.scss +++ b/bookwyrm/static/css/bookwyrm/components/_copy.scss @@ -28,3 +28,31 @@ .vertical-copy button { width: 100%; } + +.copy-tooltip { + overflow: visible; + visibility: hidden; + width: 140px; + background-color: #555; + color: #fff; + text-align: center; + border-radius: 6px; + padding: 5px; + position: absolute; + z-index: 1; + margin-left: -30px; + margin-top: -45px; + opacity: 0; + transition: opacity 0.3s; +} + +.copy-tooltip::after { + content: ""; + position: absolute; + top: 100%; + left: 50%; + margin-left: -60px; + border-width: 5px; + border-style: solid; + border-color: #555 transparent transparent transparent; + } diff --git a/bookwyrm/static/css/fonts/icomoon.eot b/bookwyrm/static/css/fonts/icomoon.eot index 69628662beb9b527fe62d38c0d177366773ad879..b86375a90a2468a4426e2464fb0eb7e5c9e5bfbe 100644 GIT binary patch delta 529 zcmX9)OK1~O6g_V~Bu$j$CCrp+BpKT#R7!9Z8yBSxy0fDA!A(US+p!5YO)y==X3?y= zHcUb7&QHaKV4<5XDm=lR2->A66hZWLA#Ow$ZN@wGJudg0d+vMpaK+_~EBfdW;9*BE zX_X0GcARs}?p!cBPmG0Q05&LYPFCIe>uf6qunh5~X}3|QoFu+VIXXRa?{? z9jA&44J&-0LT=WrdXL6?c8LF?A&d1|V-6}Q7;1((RCUvzVl6vl2gsO;7#MQWkU2Rl zOLAT=%1_&|?U7(N2*P)yLH5dFf1lE~|F8Med}%&5FPevqKmJkW(Av0iE4!crfzY4| zL=i_CCdd%uR)kx02aSG}A3tFk5uP^snH6HC-E{{ zw&Hcc1f2lP`;Yf_35RAm)DWR*38dGA^-;^RzGbOTRBj|jeO8nbU6fJ_E+;I zR`h@5ANZ}polN3u@_cfOpXKxXIe(jqrp8j2sFP6?{choVuZ^qla2E|!P{S;(&PEZo K&xZ_(SN{MlgOCaU delta 391 zcmdlJav+%XfF=Wj%tTgmmh>!N>4^?Lj0O|^MJFy2tv6&~VAuo13CX#M150V!Kw1FEUjd{!(sL@)Om_4{4Q0VPpFa7!db)&wgup665kVKh y0>M7POF|q%GC)T#Fz8OM(s(Xzz!1ie%232m%#g{D&yWXnv>}5YgTdqq%_9H}x@C9( diff --git a/bookwyrm/static/css/fonts/icomoon.svg b/bookwyrm/static/css/fonts/icomoon.svg index c67c8b225..a3c902a07 100644 --- a/bookwyrm/static/css/fonts/icomoon.svg +++ b/bookwyrm/static/css/fonts/icomoon.svg @@ -39,6 +39,7 @@ + diff --git a/bookwyrm/static/css/fonts/icomoon.ttf b/bookwyrm/static/css/fonts/icomoon.ttf index 12c79d551739bdbfe9e7246ae713b4d23545fdce..edcbd3b7553c0192cacd84b0039b2cd8a7a66383 100644 GIT binary patch delta 530 zcmXw$PiPZC6vn^FCL~RSWD|CSCXlRcHx^4Y726)9#y=;87F!Te(Jpmu3QZGC53xNo zr=FE9sKtwDMZts6OAiVo^d^G#;zc1SBHM!qB6?`Eeycdc@ZN9UoB7_nxj%k)VhI93 z3@s=)JT`G?Af5~laOVZr$S!_3+3o*`f(`A)@`|{`LK_5DTwktc~^7uZoe}sG6(zJ zA$P%DcHeJDw+Fpl&x7zjr-Nxl|E+)1pXm?ubNYVm7f%XD^kvqcipktk2=HVOibRC1 zNkIoI5~>ka4bEPzTTzc3HMFpr(z=D=`+-)cEJZ8O+L3lfin5fp_|gHrfE19s(xbwf z-GPuCEW-Zh|7|A9)G9L}Otm;t>sjMnFemn|x}i%mSL4TiA{O-DjP{3ztN*RD#~czx z=d^hz1V)FQwwZQ*m}A-ar^INYt)5XA)W_;(GLjrgj`NWJ%|+*8;cL2t^RRIP4a}g1 PId-vxB1+DM1Dk&ULNJO9 delta 376 zcmbOcJSV80fsuiMft#U$ftkU;KUm+0Ux?ihD6$8L6OwZi3zp|Dk6>V6lmYU4(i4jd zfV2RRzXC{eq~}zone4L21M)X8FsN8$q$Z}wzxY$az@Yj9C~uYl6yV@yF=t>Z3X$oB|wJ)fyN(@JOeZH#fb;1g+Z>80J@8rfdl9tg_oi)6($ETN>9#Zl;D3W zwpwg~Sb&(K=r^D|v{xFx+#v1E(i9 zsF^eBPTrw5eR8mRx{`o|z$!rzK^MUS!9KxDLL5Re;Na6`k^%(^5HJCa7oPlC{gk)? eLl{FULlHwULncE$Lmtqrh75WP29vL79036PpI5v9 diff --git a/bookwyrm/static/css/fonts/icomoon.woff b/bookwyrm/static/css/fonts/icomoon.woff index 624b70f337b942f4ac432b52ad994aed30204293..47d4bffb57ce17cf8b0ef46bbdb22873880becfc 100644 GIT binary patch delta 584 zcmX|9O=uHA6#iy+OVUJ0HtTNG29h;x(qafivGq`DQ0PIS(h4FJv`bx^V$&2;u(pTh z)N^G7H8-)99=!G9L1Dz46c6^|MImYhw+Hc3>LJbgrvAL)W8VAb8@@M>`98LN`N*A1 z!^2>p=-Wp4V1Gz8WxdCK0NYgLTW3Qhp5lLK=>TZc(SUXcH&o2O3x{K!$8$+GvXDXAV8_B*P z;+n+P>RXhZ1v2hUP@Ou!StT*+lwINmsi75#M;AL=bCv2my{PeDr&6Y>Tl^4PGRX?Z z5QT~my)@;SUdqeyI_o--^9H;{Z^iqt6WZzb_kADC{~Figs`bnIVLh`RTcg%-bB}H^ zKH3-OKbf|<%O;Y`9e^)1sDkDZh5-xIBGc`FZqw>9)2e>zv~31-!%Q<<=1Q$y6s)Gy zTEguTtSE%bzO_M_A{fNJ@X2M}ZG#C4YQ+7MgBk~lyg1-gyk%O=Eo=Xe>=aL8DM$7nt8y}*;|>&m*_~esbA0+^{09x7K{zW#z@Ktc}0## hhC<)K;IFf9;ssoRi`%GT8Wqga_zTFRz}I>kzX3o>k~9DS delta 438 zcmaD7{31xC+~3WOfsp|SG&2~u!L-cei<-idA84{n)E22XOwLU#U|?X(07~_M@bcW{ z5$TD=Ah9n%J_i&Fq~}zo0mc3>FsN97u*oiqyo}Vu6b1%06QCM15SD-Orz8U?2o%c! z@>M{XgPX-XBe$diC^iAe-vYu*>^Pls@{@t;{M2250x=+bpysqsZej({V)X?;z5*EA zG0Eg5=B5J04gf801L2uooWBe5i%Wn$@_?&j2C|r$FHYuRtQH2Ez#zdOz`zW2JR^g` zOVO7Kljkr>E1SQpdfE2!`YWziX8-^G|Ifhq|FJlWIJ4MWvDIP=!~(<=MZZnH$0)n` zFJprI=97v~Smc2QN&9A{$Mf5KW#DE3@)#KIIoyHMlh3G`GwM!eQJ+3}zIwWnfP}y* zK@mY0!2-cP!An9MLNefh*JY9dItB!ozyWWsaZ22PA&eoFp@^ZFA(J7WArI(TLk2wt JgUJe-M*!fKY6t)T diff --git a/bookwyrm/static/css/vendor/icons.css b/bookwyrm/static/css/vendor/icons.css index 6477aee5c..b661ce8e7 100644 --- a/bookwyrm/static/css/vendor/icons.css +++ b/bookwyrm/static/css/vendor/icons.css @@ -1,10 +1,10 @@ @font-face { font-family: 'icomoon'; - src: url('../fonts/icomoon.eot?r7jc98'); - src: url('../fonts/icomoon.eot?r7jc98#iefix') format('embedded-opentype'), - url('../fonts/icomoon.ttf?r7jc98') format('truetype'), - url('../fonts/icomoon.woff?r7jc98') format('woff'), - url('../fonts/icomoon.svg?r7jc98#icomoon') format('svg'); + src: url('../fonts/icomoon.eot?nr4nq7'); + src: url('../fonts/icomoon.eot?nr4nq7#iefix') format('embedded-opentype'), + url('../fonts/icomoon.ttf?nr4nq7') format('truetype'), + url('../fonts/icomoon.woff?nr4nq7') format('woff'), + url('../fonts/icomoon.svg?nr4nq7#icomoon') format('svg'); font-weight: normal; font-style: normal; font-display: block; @@ -122,6 +122,9 @@ .icon-graphic-banknote:before { content: "\e920"; } +.icon-copy:before { + content: "\e92c"; +} .icon-search:before { content: "\e986"; } diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index 0c6958f33..1dd8bf813 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -65,6 +65,9 @@ let BookWyrm = new (class { .querySelectorAll('input[type="file"]') .forEach(bookwyrm.disableIfTooLarge.bind(bookwyrm)); document.querySelectorAll("[data-copytext]").forEach(bookwyrm.copyText.bind(bookwyrm)); + document + .querySelectorAll("[data-copywithtooltip]") + .forEach(bookwyrm.copyWithTooltip.bind(bookwyrm)); document .querySelectorAll(".modal.is-active") .forEach(bookwyrm.handleActiveModal.bind(bookwyrm)); @@ -524,6 +527,20 @@ let BookWyrm = new (class { textareaEl.parentNode.appendChild(copyButtonEl); } + copyWithTooltip(copyButtonEl) { + const text = document.getElementById(copyButtonEl.dataset.contentId).innerHTML; + const tooltipEl = document.getElementById(copyButtonEl.dataset.tooltipId); + copyButtonEl.addEventListener("click", () => { + navigator.clipboard.writeText(text); + tooltipEl.style.visibility = "visible"; + tooltipEl.style.opacity = 1; + setTimeout(function() { + tooltipEl.style.visibility = "hidden"; + tooltipEl.style.opacity = 0; + }, 3000) + }) + } + /** * Handle the details dropdown component. * diff --git a/bookwyrm/templates/book/book_identifiers.html b/bookwyrm/templates/book/book_identifiers.html index ff5aad0bb..3a92d9ecf 100644 --- a/bookwyrm/templates/book/book_identifiers.html +++ b/bookwyrm/templates/book/book_identifiers.html @@ -4,42 +4,48 @@ {% if book.isbn_13 or book.oclc_number or book.asin or book.aasin or book.isfdb %}
{% if book.isbn_13 %} -
+
{% trans "ISBN:" %}
-
{{ book.isbn_13 }}
+
{{ hyphenated_isbn13 }}
+
+ + {% trans "Copied ISBN!" %} +
{% endif %} {% if book.oclc_number %} -
+
{% trans "OCLC Number:" %}
{{ book.oclc_number }}
{% endif %} {% if book.asin %} -
+
{% trans "ASIN:" %}
{{ book.asin }}
{% endif %} {% if book.aasin %} -
+
{% trans "Audible ASIN:" %}
{{ book.aasin }}
{% endif %} {% if book.isfdb %} -
+
{% trans "ISFDB ID:" %}
{{ book.isfdb }}
{% endif %} {% if book.goodreads_key %} -
+
{% trans "Goodreads:" %}
{{ book.goodreads_key }}
diff --git a/bookwyrm/views/books/books.py b/bookwyrm/views/books/books.py index 565220b6e..90bdf767a 100644 --- a/bookwyrm/views/books/books.py +++ b/bookwyrm/views/books/books.py @@ -14,6 +14,7 @@ from bookwyrm import forms, models from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.connectors import connector_manager, ConnectorException from bookwyrm.connectors.abstract_connector import get_image +from bookwyrm.isbn.isbn import hyphenator_singleton as hyphenator from bookwyrm.settings import PAGE_LENGTH from bookwyrm.views.helpers import is_api_request, maybe_redirect_local_path @@ -90,6 +91,7 @@ class Book(View): "rating": reviews.aggregate(Avg("rating"))["rating__avg"], "lists": lists, "update_error": kwargs.get("update_error", False), + "hyphenated_isbn13": hyphenator.hyphenate(book.isbn_13), } if request.user.is_authenticated: From 1bda8a5d9d2685a2e0988c72aa8a617b5cc6057c Mon Sep 17 00:00:00 2001 From: axiomizer Date: Sat, 22 Jul 2023 13:57:51 -0400 Subject: [PATCH 07/23] Revert part of "Hyphenate ISBN numbers and add copy button" related to hyphenation This partially reverts commit d2c4785af1fbd741bb67c70fd0cfa3313f20eb48. --- bookwyrm/isbn/RangeMessage.xml | 7904 ----------------- bookwyrm/isbn/__init__.py | 0 bookwyrm/isbn/isbn.py | 71 - bookwyrm/static/js/bookwyrm.js | 6 +- bookwyrm/templates/book/book_identifiers.html | 2 +- bookwyrm/views/books/books.py | 2 - 6 files changed, 4 insertions(+), 7981 deletions(-) delete mode 100644 bookwyrm/isbn/RangeMessage.xml delete mode 100644 bookwyrm/isbn/__init__.py delete mode 100644 bookwyrm/isbn/isbn.py diff --git a/bookwyrm/isbn/RangeMessage.xml b/bookwyrm/isbn/RangeMessage.xml deleted file mode 100644 index 619cf1ff7..000000000 --- a/bookwyrm/isbn/RangeMessage.xml +++ /dev/null @@ -1,7904 +0,0 @@ - - - - - - - - - - - - - - - -]> - - International ISBN Agency - fa1a5bb4-9703-4910-bd34-2ffe0ae46c45 - Sat, 22 Jul 2023 02:00:37 BST - - - 978 - International ISBN Agency - - - 0000000-5999999 - 1 - - - 6000000-6499999 - 3 - - - 6500000-6599999 - 2 - - - 6600000-6999999 - 0 - - - 7000000-7999999 - 1 - - - 8000000-9499999 - 2 - - - 9500000-9899999 - 3 - - - 9900000-9989999 - 4 - - - 9990000-9999999 - 5 - - - - - 979 - International ISBN Agency - - - 0000000-0999999 - 0 - - - 1000000-1299999 - 2 - - - 1300000-7999999 - 0 - - - 8000000-8999999 - 1 - - - 9000000-9999999 - 0 - - - - - - - 978-0 - English language - - - 0000000-1999999 - 2 - - - 2000000-2279999 - 3 - - - 2280000-2289999 - 4 - - - 2290000-3689999 - 3 - - - 3690000-3699999 - 4 - - - 3700000-6389999 - 3 - - - 6390000-6397999 - 4 - - - 6398000-6399999 - 7 - - - 6400000-6449999 - 3 - - - 6450000-6459999 - 7 - - - 6460000-6479999 - 3 - - - 6480000-6489999 - 7 - - - 6490000-6549999 - 3 - - - 6550000-6559999 - 4 - - - 6560000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9499999 - 6 - - - 9500000-9999999 - 7 - - - - - 978-1 - English language - - - 0000000-0099999 - 3 - - - 0100000-0299999 - 2 - - - 0300000-0349999 - 3 - - - 0350000-0399999 - 4 - - - 0400000-0499999 - 3 - - - 0500000-0699999 - 2 - - - 0700000-0999999 - 4 - - - 1000000-3979999 - 3 - - - 3980000-5499999 - 4 - - - 5500000-6499999 - 5 - - - 6500000-6799999 - 4 - - - 6800000-6859999 - 5 - - - 6860000-7139999 - 4 - - - 7140000-7169999 - 3 - - - 7170000-7319999 - 4 - - - 7320000-7399999 - 7 - - - 7400000-7749999 - 5 - - - 7750000-7753999 - 7 - - - 7754000-7763999 - 5 - - - 7764000-7764999 - 7 - - - 7765000-7769999 - 5 - - - 7770000-7782999 - 7 - - - 7783000-7899999 - 5 - - - 7900000-7999999 - 4 - - - 8000000-8004999 - 5 - - - 8005000-8049999 - 5 - - - 8050000-8379999 - 5 - - - 8380000-8384999 - 7 - - - 8385000-8671999 - 5 - - - 8672000-8675999 - 4 - - - 8676000-8697999 - 5 - - - 8698000-9159999 - 6 - - - 9160000-9165059 - 7 - - - 9165060-9168699 - 6 - - - 9168700-9169079 - 7 - - - 9169080-9195999 - 6 - - - 9196000-9196549 - 7 - - - 9196550-9729999 - 6 - - - 9730000-9877999 - 4 - - - 9878000-9911499 - 6 - - - 9911500-9911999 - 7 - - - 9912000-9989899 - 6 - - - 9989900-9999999 - 7 - - - - - 978-2 - French language - - - 0000000-1999999 - 2 - - - 2000000-3499999 - 3 - - - 3500000-3999999 - 5 - - - 4000000-4869999 - 3 - - - 4870000-4949999 - 6 - - - 4950000-4959999 - 3 - - - 4960000-4966999 - 4 - - - 4967000-4969999 - 5 - - - 4970000-5279999 - 3 - - - 5280000-5299999 - 4 - - - 5300000-6999999 - 3 - - - 7000000-8399999 - 4 - - - 8400000-8999999 - 5 - - - 9000000-9197999 - 6 - - - 9198000-9198099 - 5 - - - 9198100-9199429 - 6 - - - 9199430-9199689 - 7 - - - 9199690-9499999 - 6 - - - 9500000-9999999 - 7 - - - - - 978-3 - German language - - - 0000000-0299999 - 2 - - - 0300000-0339999 - 3 - - - 0340000-0369999 - 4 - - - 0370000-0399999 - 5 - - - 0400000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9499999 - 6 - - - 9500000-9539999 - 7 - - - 9540000-9699999 - 5 - - - 9700000-9849999 - 7 - - - 9850000-9999999 - 5 - - - - - 978-4 - Japan - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9499999 - 6 - - - 9500000-9999999 - 7 - - - - - 978-5 - former U.S.S.R - - - 0000000-0049999 - 5 - - - 0050000-0099999 - 4 - - - 0100000-1999999 - 2 - - - 2000000-3619999 - 3 - - - 3620000-3623999 - 4 - - - 3624000-3629999 - 5 - - - 3630000-4209999 - 3 - - - 4210000-4299999 - 4 - - - 4300000-4309999 - 3 - - - 4310000-4399999 - 4 - - - 4400000-4409999 - 3 - - - 4410000-4499999 - 4 - - - 4500000-6039999 - 3 - - - 6040000-6049999 - 7 - - - 6050000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9099999 - 6 - - - 9100000-9199999 - 5 - - - 9200000-9299999 - 4 - - - 9300000-9499999 - 5 - - - 9500000-9500999 - 7 - - - 9501000-9799999 - 4 - - - 9800000-9899999 - 5 - - - 9900000-9909999 - 7 - - - 9910000-9999999 - 4 - - - - - 978-600 - Iran - - - 0000000-0999999 - 2 - - - 1000000-4999999 - 3 - - - 5000000-8999999 - 4 - - - 9000000-9867999 - 5 - - - 9868000-9929999 - 4 - - - 9930000-9959999 - 3 - - - 9960000-9999999 - 5 - - - - - 978-601 - Kazakhstan - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-7999999 - 4 - - - 8000000-8499999 - 5 - - - 8500000-9999999 - 2 - - - - - 978-602 - Indonesia - - - 0000000-0699999 - 2 - - - 0700000-1399999 - 4 - - - 1400000-1499999 - 5 - - - 1500000-1699999 - 4 - - - 1700000-1999999 - 5 - - - 2000000-4999999 - 3 - - - 5000000-5399999 - 5 - - - 5400000-5999999 - 4 - - - 6000000-6199999 - 5 - - - 6200000-6999999 - 4 - - - 7000000-7499999 - 5 - - - 7500000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-603 - Saudi Arabia - - - 0000000-0499999 - 2 - - - 0500000-4999999 - 2 - - - 5000000-7999999 - 3 - - - 8000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-604 - Vietnam - - - 0000000-2999999 - 1 - - - 3000000-3999999 - 3 - - - 4000000-4699999 - 2 - - - 4700000-4979999 - 3 - - - 4980000-4999999 - 4 - - - 5000000-8999999 - 2 - - - 9000000-9799999 - 3 - - - 9800000-9999999 - 4 - - - - - 978-605 - Turkey - - - 0000000-0299999 - 2 - - - 0300000-0399999 - 3 - - - 0400000-0599999 - 2 - - - 0600000-0699999 - 5 - - - 0700000-0999999 - 2 - - - 1000000-1999999 - 3 - - - 2000000-2399999 - 4 - - - 2400000-3999999 - 3 - - - 4000000-5999999 - 4 - - - 6000000-7499999 - 5 - - - 7500000-7999999 - 4 - - - 8000000-8999999 - 5 - - - 9000000-9999999 - 4 - - - - - 978-606 - Romania - - - 0000000-0999999 - 3 - - - 1000000-4999999 - 2 - - - 5000000-7999999 - 3 - - - 8000000-9099999 - 4 - - - 9100000-9199999 - 3 - - - 9200000-9599999 - 5 - - - 9600000-9749999 - 4 - - - 9750000-9999999 - 3 - - - - - 978-607 - Mexico - - - 0000000-3999999 - 2 - - - 4000000-5929999 - 3 - - - 5930000-5999999 - 5 - - - 6000000-7499999 - 3 - - - 7500000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-608 - North Macedonia - - - 0000000-0999999 - 1 - - - 1000000-1999999 - 2 - - - 2000000-4499999 - 3 - - - 4500000-6499999 - 4 - - - 6500000-6999999 - 5 - - - 7000000-9999999 - 1 - - - - - 978-609 - Lithuania - - - 0000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-611 - Thailand - - - 0000000-9999999 - 0 - - - - - 978-612 - Peru - - - 0000000-2999999 - 2 - - - 3000000-3999999 - 3 - - - 4000000-4499999 - 4 - - - 4500000-4999999 - 5 - - - 5000000-5149999 - 4 - - - 5150000-9999999 - 0 - - - - - 978-613 - Mauritius - - - 0000000-9999999 - 1 - - - - - 978-614 - Lebanon - - - 0000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-615 - Hungary - - - 0000000-0999999 - 2 - - - 1000000-4999999 - 3 - - - 5000000-7999999 - 4 - - - 8000000-8999999 - 5 - - - 9000000-9999999 - 0 - - - - - 978-616 - Thailand - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-617 - Ukraine - - - 0000000-4999999 - 2 - - - 5000000-6999999 - 3 - - - 7000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-618 - Greece - - - 0000000-1999999 - 2 - - - 2000000-4999999 - 3 - - - 5000000-7999999 - 4 - - - 8000000-9999999 - 5 - - - - - 978-619 - Bulgaria - - - 0000000-1499999 - 2 - - - 1500000-6999999 - 3 - - - 7000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-620 - Mauritius - - - 0000000-9999999 - 1 - - - - - 978-621 - Philippines - - - 0000000-2999999 - 2 - - - 3000000-3999999 - 0 - - - 4000000-5999999 - 3 - - - 6000000-7999999 - 0 - - - 8000000-8999999 - 4 - - - 9000000-9499999 - 0 - - - 9500000-9999999 - 5 - - - - - 978-622 - Iran - - - 0000000-1099999 - 2 - - - 1100000-1999999 - 0 - - - 2000000-4249999 - 3 - - - 4250000-5199999 - 0 - - - 5200000-8499999 - 4 - - - 8500000-8999999 - 0 - - - 9000000-9999999 - 5 - - - - - 978-623 - Indonesia - - - 0000000-0999999 - 2 - - - 1000000-1299999 - 0 - - - 1300000-4999999 - 3 - - - 5000000-5249999 - 0 - - - 5250000-8799999 - 4 - - - 8800000-9999999 - 5 - - - - - 978-624 - Sri Lanka - - - 0000000-0499999 - 2 - - - 0500000-1999999 - 0 - - - 2000000-2499999 - 3 - - - 2500000-4999999 - 0 - - - 5000000-6449999 - 4 - - - 6450000-9449999 - 0 - - - 9450000-9999999 - 5 - - - - - 978-625 - Turkey - - - 0000000-0099999 - 2 - - - 0100000-3649999 - 0 - - - 3650000-4429999 - 3 - - - 4430000-4449999 - 5 - - - 4450000-4499999 - 3 - - - 4500000-6349999 - 0 - - - 6350000-7793999 - 4 - - - 7794000-7794999 - 5 - - - 7795000-8499999 - 4 - - - 8500000-9899999 - 0 - - - 9900000-9999999 - 5 - - - - - 978-626 - Taiwan - - - 0000000-0499999 - 2 - - - 0500000-2999999 - 0 - - - 3000000-4999999 - 3 - - - 5000000-6999999 - 0 - - - 7000000-7999999 - 4 - - - 8000000-9499999 - 0 - - - 9500000-9999999 - 5 - - - - - 978-627 - Pakistan - - - 0000000-2999999 - 0 - - - 3000000-3199999 - 2 - - - 3200000-4999999 - 0 - - - 5000000-5249999 - 3 - - - 5250000-7499999 - 0 - - - 7500000-7999999 - 4 - - - 8000000-9999999 - 0 - - - - - 978-628 - Colombia - - - 0000000-0999999 - 2 - - - 1000000-4999999 - 0 - - - 5000000-5499999 - 3 - - - 5500000-7499999 - 0 - - - 7500000-8499999 - 4 - - - 8500000-9499999 - 0 - - - 9500000-9999999 - 5 - - - - - 978-629 - Malaysia - - - 0000000-0299999 - 2 - - - 0300000-4699999 - 0 - - - 4700000-4999999 - 3 - - - 5000000-7499999 - 0 - - - 7500000-7999999 - 4 - - - 8000000-9649999 - 0 - - - 9650000-9999999 - 5 - - - - - 978-630 - Romania - - - 0000000-2999999 - 0 - - - 3000000-3499999 - 3 - - - 3500000-6499999 - 0 - - - 6500000-6849999 - 4 - - - 6850000-9999999 - 0 - - - - - 978-631 - Argentina - - - 0000000-0999999 - 2 - - - 1000000-2999999 - 0 - - - 3000000-3999999 - 3 - - - 4000000-6499999 - 0 - - - 6500000-7499999 - 4 - - - 7500000-8999999 - 0 - - - 9000000-9999999 - 5 - - - - - 978-65 - Brazil - - - 0000000-0199999 - 2 - - - 0200000-2499999 - 0 - - - 2500000-2999999 - 3 - - - 3000000-3029999 - 3 - - - 3030000-4999999 - 0 - - - 5000000-5129999 - 4 - - - 5130000-5349999 - 0 - - - 5350000-6149999 - 4 - - - 6150000-7999999 - 0 - - - 8000000-8182499 - 5 - - - 8182500-8449999 - 0 - - - 8450000-8999999 - 5 - - - 9000000-9024499 - 6 - - - 9024500-9799999 - 0 - - - 9800000-9999999 - 6 - - - - - 978-7 - China, People's Republic - - - 0000000-0999999 - 2 - - - 1000000-4999999 - 3 - - - 5000000-7999999 - 4 - - - 8000000-8999999 - 5 - - - 9000000-9999999 - 6 - - - - - 978-80 - former Czechoslovakia - - - 0000000-1999999 - 2 - - - 2000000-5299999 - 3 - - - 5300000-5499999 - 5 - - - 5500000-6899999 - 3 - - - 6900000-6999999 - 5 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9989999 - 6 - - - 9990000-9999999 - 5 - - - - - 978-81 - India - - - 0000000-1899999 - 2 - - - 1900000-1999999 - 5 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9999999 - 6 - - - - - 978-82 - Norway - - - 0000000-1999999 - 2 - - - 2000000-6899999 - 3 - - - 6900000-6999999 - 6 - - - 7000000-8999999 - 4 - - - 9000000-9899999 - 5 - - - 9900000-9999999 - 6 - - - - - 978-83 - Poland - - - 0000000-1999999 - 2 - - - 2000000-5999999 - 3 - - - 6000000-6999999 - 5 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9999999 - 6 - - - - - 978-84 - Spain - - - 0000000-0999999 - 2 - - - 1000000-1049999 - 5 - - - 1050000-1199999 - 4 - - - 1200000-1299999 - 6 - - - 1300000-1399999 - 4 - - - 1400000-1499999 - 3 - - - 1500000-1999999 - 5 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9199999 - 4 - - - 9200000-9239999 - 6 - - - 9240000-9299999 - 5 - - - 9300000-9499999 - 6 - - - 9500000-9699999 - 5 - - - 9700000-9999999 - 4 - - - - - 978-85 - Brazil - - - 0000000-1999999 - 2 - - - 2000000-4549999 - 3 - - - 4550000-4552999 - 6 - - - 4553000-4559999 - 5 - - - 4560000-5289999 - 3 - - - 5290000-5319999 - 5 - - - 5320000-5339999 - 4 - - - 5340000-5399999 - 3 - - - 5400000-5402999 - 5 - - - 5403000-5403999 - 5 - - - 5404000-5404999 - 6 - - - 5405000-5408999 - 5 - - - 5409000-5409999 - 6 - - - 5410000-5439999 - 5 - - - 5440000-5479999 - 4 - - - 5480000-5499999 - 5 - - - 5500000-5999999 - 4 - - - 6000000-6999999 - 5 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9249999 - 6 - - - 9250000-9449999 - 5 - - - 9450000-9599999 - 4 - - - 9600000-9799999 - 2 - - - 9800000-9999999 - 5 - - - - - 978-86 - former Yugoslavia - - - 0000000-2999999 - 2 - - - 3000000-5999999 - 3 - - - 6000000-7999999 - 4 - - - 8000000-8999999 - 5 - - - 9000000-9999999 - 6 - - - - - 978-87 - Denmark - - - 0000000-2999999 - 2 - - - 3000000-3999999 - 0 - - - 4000000-6499999 - 3 - - - 6500000-6999999 - 0 - - - 7000000-7999999 - 4 - - - 8000000-8499999 - 0 - - - 8500000-9499999 - 5 - - - 9500000-9699999 - 0 - - - 9700000-9999999 - 6 - - - - - 978-88 - Italy - - - 0000000-1999999 - 2 - - - 2000000-3119999 - 3 - - - 3120000-3149999 - 5 - - - 3150000-3189999 - 3 - - - 3190000-3229999 - 5 - - - 3230000-3269999 - 3 - - - 3270000-3389999 - 4 - - - 3390000-3609999 - 3 - - - 3610000-3629999 - 4 - - - 3630000-5489999 - 3 - - - 5490000-5549999 - 4 - - - 5550000-5999999 - 3 - - - 6000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9099999 - 6 - - - 9100000-9269999 - 3 - - - 9270000-9399999 - 4 - - - 9400000-9479999 - 6 - - - 9480000-9999999 - 5 - - - - - 978-89 - Korea, Republic - - - 0000000-2499999 - 2 - - - 2500000-5499999 - 3 - - - 5500000-8499999 - 4 - - - 8500000-9499999 - 5 - - - 9500000-9699999 - 6 - - - 9700000-9899999 - 5 - - - 9900000-9999999 - 3 - - - - - 978-90 - Netherlands - - - 0000000-1999999 - 2 - - - 2000000-4999999 - 3 - - - 5000000-6999999 - 4 - - - 7000000-7999999 - 5 - - - 8000000-8499999 - 6 - - - 8500000-8999999 - 4 - - - 9000000-9099999 - 2 - - - 9100000-9399999 - 0 - - - 9400000-9499999 - 2 - - - 9500000-9999999 - 0 - - - - - 978-91 - Sweden - - - 0000000-1999999 - 1 - - - 2000000-4999999 - 2 - - - 5000000-6499999 - 3 - - - 6500000-6999999 - 0 - - - 7000000-8199999 - 4 - - - 8200000-8499999 - 0 - - - 8500000-9499999 - 5 - - - 9500000-9699999 - 0 - - - 9700000-9999999 - 6 - - - - - 978-92 - International NGO Publishers and EU Organizations - - - 0000000-5999999 - 1 - - - 6000000-7999999 - 2 - - - 8000000-8999999 - 3 - - - 9000000-9499999 - 4 - - - 9500000-9899999 - 5 - - - 9900000-9999999 - 6 - - - - - 978-93 - India - - - 0000000-0999999 - 2 - - - 1000000-4999999 - 3 - - - 5000000-7999999 - 4 - - - 8000000-9599999 - 5 - - - 9600000-9999999 - 6 - - - - - 978-94 - Netherlands - - - 0000000-5999999 - 3 - - - 6000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-950 - Argentina - - - 0000000-4999999 - 2 - - - 5000000-8999999 - 3 - - - 9000000-9899999 - 4 - - - 9900000-9999999 - 5 - - - - - 978-951 - Finland - - - 0000000-1999999 - 1 - - - 2000000-5499999 - 2 - - - 5500000-8899999 - 3 - - - 8900000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-952 - Finland - - - 0000000-1999999 - 2 - - - 2000000-4999999 - 3 - - - 5000000-5999999 - 4 - - - 6000000-6499999 - 2 - - - 6500000-6599999 - 5 - - - 6600000-6699999 - 4 - - - 6700000-6999999 - 5 - - - 7000000-7999999 - 4 - - - 8000000-9499999 - 2 - - - 9500000-9899999 - 4 - - - 9900000-9999999 - 5 - - - - - 978-953 - Croatia - - - 0000000-0999999 - 1 - - - 1000000-1499999 - 2 - - - 1500000-4799999 - 3 - - - 4800000-4999999 - 5 - - - 5000000-5009999 - 3 - - - 5010000-5099999 - 5 - - - 5100000-5499999 - 2 - - - 5500000-5999999 - 5 - - - 6000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-954 - Bulgaria - - - 0000000-2899999 - 2 - - - 2900000-2999999 - 4 - - - 3000000-7999999 - 3 - - - 8000000-8999999 - 4 - - - 9000000-9299999 - 5 - - - 9300000-9999999 - 4 - - - - - 978-955 - Sri Lanka - - - 0000000-1999999 - 4 - - - 2000000-3399999 - 2 - - - 3400000-3549999 - 4 - - - 3550000-3599999 - 5 - - - 3600000-3799999 - 4 - - - 3800000-3899999 - 5 - - - 3900000-4099999 - 4 - - - 4100000-4499999 - 5 - - - 4500000-4999999 - 4 - - - 5000000-5499999 - 5 - - - 5500000-7109999 - 3 - - - 7110000-7149999 - 5 - - - 7150000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-956 - Chile - - - 0000000-0899999 - 2 - - - 0900000-0999999 - 5 - - - 1000000-1999999 - 2 - - - 2000000-5999999 - 3 - - - 6000000-6999999 - 4 - - - 7000000-9999999 - 4 - - - - - 978-957 - Taiwan - - - 0000000-0299999 - 2 - - - 0300000-0499999 - 4 - - - 0500000-1999999 - 2 - - - 2000000-2099999 - 4 - - - 2100000-2799999 - 2 - - - 2800000-3099999 - 5 - - - 3100000-4399999 - 2 - - - 4400000-8199999 - 3 - - - 8200000-9699999 - 4 - - - 9700000-9999999 - 5 - - - - - 978-958 - Colombia - - - 0000000-4999999 - 2 - - - 5000000-5099999 - 3 - - - 5100000-5199999 - 4 - - - 5200000-5399999 - 5 - - - 5400000-5599999 - 4 - - - 5600000-5999999 - 5 - - - 6000000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-959 - Cuba - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-9999999 - 5 - - - - - 978-960 - Greece - - - 0000000-1999999 - 2 - - - 2000000-6599999 - 3 - - - 6600000-6899999 - 4 - - - 6900000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-9299999 - 5 - - - 9300000-9399999 - 2 - - - 9400000-9799999 - 4 - - - 9800000-9999999 - 5 - - - - - 978-961 - Slovenia - - - 0000000-1999999 - 2 - - - 2000000-5999999 - 3 - - - 6000000-8999999 - 4 - - - 9000000-9799999 - 5 - - - 9800000-9999999 - 0 - - - - - 978-962 - Hong Kong, China - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8699999 - 5 - - - 8700000-8999999 - 4 - - - 9000000-9999999 - 3 - - - - - 978-963 - Hungary - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9999999 - 4 - - - - - 978-964 - Iran - - - 0000000-1499999 - 2 - - - 1500000-2499999 - 3 - - - 2500000-2999999 - 4 - - - 3000000-5499999 - 3 - - - 5500000-8999999 - 4 - - - 9000000-9699999 - 5 - - - 9700000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-965 - Israel - - - 0000000-1999999 - 2 - - - 2000000-5999999 - 3 - - - 6000000-6999999 - 0 - - - 7000000-7999999 - 4 - - - 8000000-8999999 - 0 - - - 9000000-9999999 - 5 - - - - - 978-966 - Ukraine - - - 0000000-1299999 - 2 - - - 1300000-1399999 - 3 - - - 1400000-1499999 - 2 - - - 1500000-1699999 - 4 - - - 1700000-1999999 - 3 - - - 2000000-2789999 - 4 - - - 2790000-2899999 - 3 - - - 2900000-2999999 - 4 - - - 3000000-6999999 - 3 - - - 7000000-8999999 - 4 - - - 9000000-9099999 - 5 - - - 9100000-9499999 - 3 - - - 9500000-9799999 - 5 - - - 9800000-9999999 - 3 - - - - - 978-967 - Malaysia - - - 0000000-0999999 - 4 - - - 1000000-1999999 - 5 - - - 2000000-2499999 - 4 - - - 2500000-2549999 - 3 - - - 2550000-2699999 - 5 - - - 2700000-2799999 - 4 - - - 2800000-2999999 - 4 - - - 3000000-4999999 - 3 - - - 5000000-5999999 - 4 - - - 6000000-8999999 - 2 - - - 9000000-9899999 - 3 - - - 9900000-9989999 - 4 - - - 9990000-9999999 - 5 - - - - - 978-968 - Mexico - - - 0100000-3999999 - 2 - - - 4000000-4999999 - 3 - - - 5000000-7999999 - 4 - - - 8000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-969 - Pakistan - - - 0000000-1999999 - 1 - - - 2000000-2099999 - 2 - - - 2100000-2199999 - 3 - - - 2200000-2299999 - 4 - - - 2300000-2399999 - 5 - - - 2400000-3999999 - 2 - - - 4000000-7499999 - 3 - - - 7500000-9999999 - 4 - - - - - 978-970 - Mexico - - - 0100000-5999999 - 2 - - - 6000000-8999999 - 3 - - - 9000000-9099999 - 4 - - - 9100000-9699999 - 5 - - - 9700000-9999999 - 4 - - - - - 978-971 - Philippines - - - 0000000-0159999 - 3 - - - 0160000-0199999 - 4 - - - 0200000-0299999 - 2 - - - 0300000-0599999 - 4 - - - 0600000-4999999 - 2 - - - 5000000-8499999 - 3 - - - 8500000-9099999 - 4 - - - 9100000-9599999 - 5 - - - 9600000-9699999 - 4 - - - 9700000-9899999 - 2 - - - 9900000-9999999 - 4 - - - - - 978-972 - Portugal - - - 0000000-1999999 - 1 - - - 2000000-5499999 - 2 - - - 5500000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-973 - Romania - - - 0000000-0999999 - 1 - - - 1000000-1699999 - 3 - - - 1700000-1999999 - 4 - - - 2000000-5499999 - 2 - - - 5500000-7599999 - 3 - - - 7600000-8499999 - 4 - - - 8500000-8899999 - 5 - - - 8900000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-974 - Thailand - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8499999 - 4 - - - 8500000-8999999 - 5 - - - 9000000-9499999 - 5 - - - 9500000-9999999 - 4 - - - - - 978-975 - Turkey - - - 0000000-0199999 - 5 - - - 0200000-2399999 - 2 - - - 2400000-2499999 - 4 - - - 2500000-5999999 - 3 - - - 6000000-9199999 - 4 - - - 9200000-9899999 - 5 - - - 9900000-9999999 - 3 - - - - - 978-976 - Caribbean Community - - - 0000000-3999999 - 1 - - - 4000000-5999999 - 2 - - - 6000000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-977 - Egypt - - - 0000000-1999999 - 2 - - - 2000000-4999999 - 3 - - - 5000000-6999999 - 4 - - - 7000000-8499999 - 3 - - - 8500000-8929999 - 5 - - - 8930000-8949999 - 3 - - - 8950000-8999999 - 4 - - - 9000000-9899999 - 2 - - - 9900000-9999999 - 3 - - - - - 978-978 - Nigeria - - - 0000000-1999999 - 3 - - - 2000000-2999999 - 4 - - - 3000000-7799999 - 5 - - - 7800000-7999999 - 3 - - - 8000000-8999999 - 4 - - - 9000000-9999999 - 3 - - - - - 978-979 - Indonesia - - - 0000000-0999999 - 3 - - - 1000000-1499999 - 4 - - - 1500000-1999999 - 5 - - - 2000000-2999999 - 2 - - - 3000000-3999999 - 4 - - - 4000000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-980 - Venezuela - - - 0000000-1999999 - 2 - - - 2000000-5999999 - 3 - - - 6000000-9999999 - 4 - - - - - 978-981 - Singapore - - - 0000000-1699999 - 2 - - - 1700000-1799999 - 5 - - - 1800000-1999999 - 2 - - - 2000000-2999999 - 3 - - - 3000000-3099999 - 4 - - - 3100000-3999999 - 3 - - - 4000000-9499999 - 4 - - - 9500000-9899999 - 0 - - - 9900000-9999999 - 2 - - - - - 978-982 - South Pacific - - - 0000000-0999999 - 2 - - - 1000000-6999999 - 3 - - - 7000000-8999999 - 2 - - - 9000000-9799999 - 4 - - - 9800000-9999999 - 5 - - - - - 978-983 - Malaysia - - - 0000000-0199999 - 2 - - - 0200000-1999999 - 3 - - - 2000000-3999999 - 4 - - - 4000000-4499999 - 5 - - - 4500000-4999999 - 2 - - - 5000000-7999999 - 2 - - - 8000000-8999999 - 3 - - - 9000000-9899999 - 4 - - - 9900000-9999999 - 5 - - - - - 978-984 - Bangladesh - - - 0000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-8999999 - 4 - - - 9000000-9999999 - 5 - - - - - 978-985 - Belarus - - - 0000000-3999999 - 2 - - - 4000000-5999999 - 3 - - - 6000000-8799999 - 4 - - - 8800000-8999999 - 3 - - - 9000000-9999999 - 5 - - - - - 978-986 - Taiwan - - - 0000000-0599999 - 2 - - - 0600000-0699999 - 5 - - - 0700000-0799999 - 4 - - - 0800000-1199999 - 2 - - - 1200000-5399999 - 3 - - - 5400000-7999999 - 4 - - - 8000000-9999999 - 5 - - - - - 978-987 - Argentina - - - 0000000-0999999 - 2 - - - 1000000-1999999 - 4 - - - 2000000-2999999 - 5 - - - 3000000-3599999 - 2 - - - 3600000-4199999 - 4 - - - 4200000-4399999 - 2 - - - 4400000-4499999 - 4 - - - 4500000-4899999 - 5 - - - 4900000-4999999 - 4 - - - 5000000-8249999 - 3 - - - 8250000-8279999 - 4 - - - 8280000-8299999 - 5 - - - 8300000-8499999 - 4 - - - 8500000-8899999 - 2 - - - 8900000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-988 - Hong Kong, China - - - 0000000-1199999 - 2 - - - 1200000-1999999 - 5 - - - 2000000-6999999 - 3 - - - 7000000-7999999 - 5 - - - 8000000-9699999 - 4 - - - 9700000-9999999 - 5 - - - - - 978-989 - Portugal - - - 0000000-1999999 - 1 - - - 2000000-3499999 - 2 - - - 3500000-3699999 - 5 - - - 3700000-5299999 - 2 - - - 5300000-5499999 - 5 - - - 5500000-7999999 - 3 - - - 8000000-9499999 - 4 - - - 9500000-9999999 - 5 - - - - - 978-9910 - Uzbekistan - - - 0000000-7299999 - 0 - - - 7300000-7499999 - 3 - - - 7500000-9649999 - 0 - - - 9650000-9999999 - 4 - - - - - 978-9911 - Montenegro - - - 0000000-1999999 - 0 - - - 2000000-2499999 - 2 - - - 2500000-5499999 - 0 - - - 5500000-7499999 - 3 - - - 7500000-9999999 - 0 - - - - - 978-9912 - Tanzania - - - 0000000-3999999 - 0 - - - 4000000-4499999 - 2 - - - 4500000-7499999 - 0 - - - 7500000-7999999 - 3 - - - 8000000-9799999 - 0 - - - 9800000-9999999 - 4 - - - - - 978-9913 - Uganda - - - 0000000-0799999 - 2 - - - 0800000-5999999 - 0 - - - 6000000-6999999 - 3 - - - 7000000-9549999 - 0 - - - 9550000-9999999 - 4 - - - - - 978-9914 - Kenya - - - 0000000-3999999 - 0 - - - 4000000-5299999 - 2 - - - 5300000-6999999 - 0 - - - 7000000-7749999 - 3 - - - 7750000-9599999 - 0 - - - 9600000-9999999 - 4 - - - - - 978-9915 - Uruguay - - - 0000000-3999999 - 0 - - - 4000000-5999999 - 2 - - - 6000000-6499999 - 0 - - - 6500000-7999999 - 3 - - - 8000000-9299999 - 0 - - - 9300000-9999999 - 4 - - - - - 978-9916 - Estonia - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-5999999 - 1 - - - 6000000-7999999 - 3 - - - 8000000-8499999 - 2 - - - 8500000-8999999 - 3 - - - 9000000-9249999 - 0 - - - 9250000-9999999 - 4 - - - - - 978-9917 - Bolivia - - - 0000000-0999999 - 1 - - - 1000000-2999999 - 0 - - - 3000000-3499999 - 2 - - - 3500000-5999999 - 0 - - - 6000000-6999999 - 3 - - - 7000000-9799999 - 0 - - - 9800000-9999999 - 4 - - - - - 978-9918 - Malta - - - 0000000-0999999 - 1 - - - 1000000-1999999 - 0 - - - 2000000-2999999 - 2 - - - 3000000-5999999 - 0 - - - 6000000-7999999 - 3 - - - 8000000-9499999 - 0 - - - 9500000-9999999 - 4 - - - - - 978-9919 - Mongolia - - - 0000000-0999999 - 1 - - - 1000000-1999999 - 0 - - - 2000000-2999999 - 2 - - - 3000000-4999999 - 0 - - - 5000000-5999999 - 3 - - - 6000000-8999999 - 0 - - - 9000000-9999999 - 4 - - - - - 978-9920 - Morocco - - - 0000000-2999999 - 0 - - - 3000000-4299999 - 2 - - - 4300000-4999999 - 0 - - - 5000000-7999999 - 3 - - - 8000000-8749999 - 0 - - - 8750000-9999999 - 4 - - - - - 978-9921 - Kuwait - - - 0000000-0999999 - 1 - - - 1000000-2999999 - 0 - - - 3000000-3999999 - 2 - - - 4000000-6999999 - 0 - - - 7000000-8999999 - 3 - - - 9000000-9699999 - 0 - - - 9700000-9999999 - 4 - - - - - 978-9922 - Iraq - - - 0000000-1999999 - 0 - - - 2000000-2999999 - 2 - - - 3000000-5999999 - 0 - - - 6000000-7999999 - 3 - - - 8000000-8499999 - 0 - - - 8500000-9999999 - 4 - - - - - 978-9923 - Jordan - - - 0000000-0999999 - 1 - - - 1000000-5999999 - 2 - - - 6000000-6999999 - 0 - - - 7000000-8999999 - 3 - - - 9000000-9399999 - 0 - - - 9400000-9999999 - 4 - - - - - 978-9924 - Cambodia - - - 0000000-2999999 - 0 - - - 3000000-3999999 - 2 - - - 4000000-4999999 - 0 - - - 5000000-6499999 - 3 - - - 6500000-8999999 - 0 - - - 9000000-9999999 - 4 - - - - - 978-9925 - Cyprus - - - 0000000-2999999 - 1 - - - 3000000-5499999 - 2 - - - 5500000-7349999 - 3 - - - 7350000-9999999 - 4 - - - - - 978-9926 - Bosnia and Herzegovina - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9927 - Qatar - - - 0000000-0999999 - 2 - - - 1000000-3999999 - 3 - - - 4000000-4999999 - 4 - - - 5000000-9999999 - 0 - - - - - 978-9928 - Albania - - - 0000000-0999999 - 2 - - - 1000000-3999999 - 3 - - - 4000000-4999999 - 4 - - - 5000000-7999999 - 0 - - - 8000000-8999999 - 3 - - - 9000000-9999999 - 2 - - - - - 978-9929 - Guatemala - - - 0000000-3999999 - 1 - - - 4000000-5499999 - 2 - - - 5500000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9930 - Costa Rica - - - 0000000-4999999 - 2 - - - 5000000-9399999 - 3 - - - 9400000-9999999 - 4 - - - - - 978-9931 - Algeria - - - 0000000-2399999 - 2 - - - 2400000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9932 - Lao People's Democratic Republic - - - 0000000-3999999 - 2 - - - 4000000-8499999 - 3 - - - 8500000-9999999 - 4 - - - - - 978-9933 - Syria - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9934 - Latvia - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 2 - - - 5000000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9935 - Iceland - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9936 - Afghanistan - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9937 - Nepal - - - 0000000-2999999 - 1 - - - 3000000-4999999 - 2 - - - 5000000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9938 - Tunisia - - - 0000000-7999999 - 2 - - - 8000000-9499999 - 3 - - - 9500000-9749999 - 4 - - - 9750000-9909999 - 3 - - - 9910000-9999999 - 4 - - - - - 978-9939 - Armenia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-8999999 - 3 - - - 9000000-9599999 - 4 - - - 9600000-9799999 - 3 - - - 9800000-9999999 - 2 - - - - - 978-9940 - Montenegro - - - 0000000-1999999 - 1 - - - 2000000-4999999 - 2 - - - 5000000-8399999 - 3 - - - 8400000-8699999 - 2 - - - 8700000-9999999 - 4 - - - - - 978-9941 - Georgia - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-8999999 - 1 - - - 9000000-9999999 - 4 - - - - - 978-9942 - Ecuador - - - 0000000-5999999 - 2 - - - 6000000-6999999 - 3 - - - 7000000-7499999 - 4 - - - 7500000-8499999 - 3 - - - 8500000-8999999 - 4 - - - 9000000-9849999 - 3 - - - 9850000-9999999 - 4 - - - - - 978-9943 - Uzbekistan - - - 0000000-2999999 - 2 - - - 3000000-3999999 - 3 - - - 4000000-9749999 - 4 - - - 9750000-9999999 - 3 - - - - - 978-9944 - Turkey - - - 0000000-0999999 - 4 - - - 1000000-4999999 - 3 - - - 5000000-5999999 - 4 - - - 6000000-6999999 - 2 - - - 7000000-7999999 - 3 - - - 8000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-9945 - Dominican Republic - - - 0000000-0099999 - 2 - - - 0100000-0799999 - 3 - - - 0800000-3999999 - 2 - - - 4000000-5699999 - 3 - - - 5700000-5799999 - 2 - - - 5800000-7999999 - 3 - - - 8000000-8099999 - 2 - - - 8100000-8499999 - 3 - - - 8500000-9999999 - 4 - - - - - 978-9946 - Korea, P.D.R. - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9947 - Algeria - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-9948 - United Arab Emirates - - - 0000000-3999999 - 2 - - - 4000000-8499999 - 3 - - - 8500000-9999999 - 4 - - - - - 978-9949 - Estonia - - - 0000000-0899999 - 2 - - - 0900000-0999999 - 3 - - - 1000000-3999999 - 2 - - - 4000000-6999999 - 3 - - - 7000000-7199999 - 2 - - - 7200000-7499999 - 4 - - - 7500000-8999999 - 2 - - - 9000000-9999999 - 4 - - - - - 978-9950 - Palestine - - - 0000000-2999999 - 2 - - - 3000000-8499999 - 3 - - - 8500000-9999999 - 4 - - - - - 978-9951 - Kosova - - - 0000000-3899999 - 2 - - - 3900000-8499999 - 3 - - - 8500000-9799999 - 4 - - - 9800000-9999999 - 3 - - - - - 978-9952 - Azerbaijan - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9999999 - 4 - - - - - 978-9953 - Lebanon - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-5999999 - 3 - - - 6000000-8999999 - 2 - - - 9000000-9299999 - 4 - - - 9300000-9699999 - 2 - - - 9700000-9999999 - 3 - - - - - 978-9954 - Morocco - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 2 - - - 4000000-7999999 - 3 - - - 8000000-9899999 - 4 - - - 9900000-9999999 - 2 - - - - - 978-9955 - Lithuania - - - 0000000-3999999 - 2 - - - 4000000-9299999 - 3 - - - 9300000-9999999 - 4 - - - - - 978-9956 - Cameroon - - - 0000000-0999999 - 1 - - - 1000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9957 - Jordan - - - 0000000-3999999 - 2 - - - 4000000-6499999 - 3 - - - 6500000-6799999 - 2 - - - 6800000-6999999 - 3 - - - 7000000-8499999 - 2 - - - 8500000-8799999 - 4 - - - 8800000-9999999 - 2 - - - - - 978-9958 - Bosnia and Herzegovina - - - 0000000-0199999 - 2 - - - 0200000-0299999 - 3 - - - 0300000-0399999 - 4 - - - 0400000-0899999 - 3 - - - 0900000-0999999 - 4 - - - 1000000-1899999 - 2 - - - 1900000-1999999 - 4 - - - 2000000-4999999 - 2 - - - 5000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9959 - Libya - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9499999 - 3 - - - 9500000-9699999 - 4 - - - 9700000-9799999 - 3 - - - 9800000-9999999 - 2 - - - - - 978-9960 - Saudi Arabia - - - 0000000-5999999 - 2 - - - 6000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9961 - Algeria - - - 0000000-2999999 - 1 - - - 3000000-6999999 - 2 - - - 7000000-9499999 - 3 - - - 9500000-9999999 - 4 - - - - - 978-9962 - Panama - - - 0000000-5499999 - 2 - - - 5500000-5599999 - 4 - - - 5600000-5999999 - 2 - - - 6000000-8499999 - 3 - - - 8500000-9999999 - 4 - - - - - 978-9963 - Cyprus - - - 0000000-1999999 - 1 - - - 2000000-2499999 - 4 - - - 2500000-2799999 - 3 - - - 2800000-2999999 - 4 - - - 3000000-5499999 - 2 - - - 5500000-7349999 - 3 - - - 7350000-7499999 - 4 - - - 7500000-9999999 - 4 - - - - - 978-9964 - Ghana - - - 0000000-6999999 - 1 - - - 7000000-9499999 - 2 - - - 9500000-9999999 - 3 - - - - - 978-9965 - Kazakhstan - - - 0000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9966 - Kenya - - - 0000000-1399999 - 3 - - - 1400000-1499999 - 2 - - - 1500000-1999999 - 4 - - - 2000000-6999999 - 2 - - - 7000000-7499999 - 4 - - - 7500000-8209999 - 3 - - - 8210000-8249999 - 4 - - - 8250000-8259999 - 3 - - - 8260000-8289999 - 4 - - - 8290000-9599999 - 3 - - - 9600000-9999999 - 4 - - - - - 978-9967 - Kyrgyz Republic - - - 0000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9968 - Costa Rica - - - 0000000-4999999 - 2 - - - 5000000-9399999 - 3 - - - 9400000-9999999 - 4 - - - - - 978-9969 - Algeria - - - 0000000-0699999 - 2 - - - 0700000-4999999 - 0 - - - 5000000-6499999 - 3 - - - 6500000-9699999 - 0 - - - 9700000-9999999 - 4 - - - - - 978-9970 - Uganda - - - 0000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9971 - Singapore - - - 0000000-5999999 - 1 - - - 6000000-8999999 - 2 - - - 9000000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9972 - Peru - - - 0000000-0999999 - 2 - - - 1000000-1999999 - 1 - - - 2000000-2499999 - 3 - - - 2500000-2999999 - 4 - - - 3000000-5999999 - 2 - - - 6000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9973 - Tunisia - - - 0000000-0599999 - 2 - - - 0600000-0899999 - 3 - - - 0900000-0999999 - 4 - - - 1000000-6999999 - 2 - - - 7000000-9699999 - 3 - - - 9700000-9999999 - 4 - - - - - 978-9974 - Uruguay - - - 0000000-2999999 - 1 - - - 3000000-5499999 - 2 - - - 5500000-7499999 - 3 - - - 7500000-8799999 - 4 - - - 8800000-9099999 - 3 - - - 9100000-9499999 - 2 - - - 9500000-9999999 - 2 - - - - - 978-9975 - Moldova - - - 0000000-0999999 - 1 - - - 1000000-2999999 - 3 - - - 3000000-3999999 - 4 - - - 4000000-4499999 - 4 - - - 4500000-8999999 - 2 - - - 9000000-9499999 - 3 - - - 9500000-9999999 - 4 - - - - - 978-9976 - Tanzania - - - 0000000-4999999 - 1 - - - 5000000-5799999 - 4 - - - 5800000-5899999 - 3 - - - 5900000-8999999 - 2 - - - 9000000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9977 - Costa Rica - - - 0000000-8999999 - 2 - - - 9000000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9978 - Ecuador - - - 0000000-2999999 - 2 - - - 3000000-3999999 - 3 - - - 4000000-9499999 - 2 - - - 9500000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9979 - Iceland - - - 0000000-4999999 - 1 - - - 5000000-6499999 - 2 - - - 6500000-6599999 - 3 - - - 6600000-7599999 - 2 - - - 7600000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9980 - Papua New Guinea - - - 0000000-3999999 - 1 - - - 4000000-8999999 - 2 - - - 9000000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9981 - Morocco - - - 0000000-0999999 - 2 - - - 1000000-1599999 - 3 - - - 1600000-1999999 - 4 - - - 2000000-7999999 - 2 - - - 8000000-9499999 - 3 - - - 9500000-9999999 - 4 - - - - - 978-9982 - Zambia - - - 0000000-7999999 - 2 - - - 8000000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9983 - Gambia - - - 0000000-7999999 - 0 - - - 8000000-9499999 - 2 - - - 9500000-9899999 - 3 - - - 9900000-9999999 - 4 - - - - - 978-9984 - Latvia - - - 0000000-4999999 - 2 - - - 5000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9985 - Estonia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-8999999 - 3 - - - 9000000-9999999 - 4 - - - - - 978-9986 - Lithuania - - - 0000000-3999999 - 2 - - - 4000000-8999999 - 3 - - - 9000000-9399999 - 4 - - - 9400000-9699999 - 3 - - - 9700000-9999999 - 2 - - - - - 978-9987 - Tanzania - - - 0000000-3999999 - 2 - - - 4000000-8799999 - 3 - - - 8800000-9999999 - 4 - - - - - 978-9988 - Ghana - - - 0000000-3999999 - 1 - - - 4000000-5499999 - 2 - - - 5500000-7499999 - 3 - - - 7500000-9999999 - 4 - - - - - 978-9989 - North Macedonia - - - 0000000-0999999 - 1 - - - 1000000-1999999 - 3 - - - 2000000-2999999 - 4 - - - 3000000-5999999 - 2 - - - 6000000-9499999 - 3 - - - 9500000-9999999 - 4 - - - - - 978-99901 - Bahrain - - - 0000000-4999999 - 2 - - - 5000000-7999999 - 3 - - - 8000000-9999999 - 2 - - - - - 978-99902 - Reserved Agency - - - 0000000-9999999 - 0 - - - - - 978-99903 - Mauritius - - - 0000000-1999999 - 1 - - - 2000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99904 - Curaçao - - - 0000000-5999999 - 1 - - - 6000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99905 - Bolivia - - - 0000000-3999999 - 1 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99906 - Kuwait - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-6999999 - 3 - - - 7000000-8999999 - 2 - - - 9000000-9499999 - 2 - - - 9500000-9999999 - 3 - - - - - 978-99908 - Malawi - - - 0000000-0999999 - 1 - - - 1000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99909 - Malta - - - 0000000-3999999 - 1 - - - 4000000-9499999 - 2 - - - 9500000-9999999 - 3 - - - - - 978-99910 - Sierra Leone - - - 0000000-2999999 - 1 - - - 3000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99911 - Lesotho - - - 0000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99912 - Botswana - - - 0000000-3999999 - 1 - - - 4000000-5999999 - 3 - - - 6000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99913 - Andorra - - - 0000000-2999999 - 1 - - - 3000000-3599999 - 2 - - - 3600000-5999999 - 0 - - - 6000000-6049999 - 3 - - - 6050000-9999999 - 0 - - - - - 978-99914 - International NGO Publishers - - - 0000000-4999999 - 1 - - - 5000000-6999999 - 2 - - - 7000000-7999999 - 1 - - - 8000000-8699999 - 2 - - - 8700000-8799999 - 3 - - - 8800000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99915 - Maldives - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99916 - Namibia - - - 0000000-2999999 - 1 - - - 3000000-6999999 - 2 - - - 7000000-9999999 - 3 - - - - - 978-99917 - Brunei Darussalam - - - 0000000-2999999 - 1 - - - 3000000-8899999 - 2 - - - 8900000-9999999 - 3 - - - - - 978-99918 - Faroe Islands - - - 0000000-3999999 - 1 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99919 - Benin - - - 0000000-2999999 - 1 - - - 3000000-3999999 - 3 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99920 - Andorra - - - 0000000-4999999 - 1 - - - 5000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99921 - Qatar - - - 0000000-1999999 - 1 - - - 2000000-6999999 - 2 - - - 7000000-7999999 - 3 - - - 8000000-8999999 - 1 - - - 9000000-9999999 - 2 - - - - - 978-99922 - Guatemala - - - 0000000-3999999 - 1 - - - 4000000-6999999 - 2 - - - 7000000-9999999 - 3 - - - - - 978-99923 - El Salvador - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99924 - Nicaragua - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99925 - Paraguay - - - 0000000-0999999 - 1 - - - 1000000-1999999 - 2 - - - 2000000-2999999 - 3 - - - 3000000-3999999 - 1 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99926 - Honduras - - - 0000000-0999999 - 1 - - - 1000000-5999999 - 2 - - - 6000000-8699999 - 3 - - - 8700000-8999999 - 2 - - - 9000000-9999999 - 2 - - - - - 978-99927 - Albania - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99928 - Georgia - - - 0000000-0999999 - 1 - - - 1000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99929 - Mongolia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99930 - Armenia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99931 - Seychelles - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99932 - Malta - - - 0000000-0999999 - 1 - - - 1000000-5999999 - 2 - - - 6000000-6999999 - 3 - - - 7000000-7999999 - 1 - - - 8000000-9999999 - 2 - - - - - 978-99933 - Nepal - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99934 - Dominican Republic - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99935 - Haiti - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-6999999 - 3 - - - 7000000-8999999 - 1 - - - 9000000-9999999 - 2 - - - - - 978-99936 - Bhutan - - - 0000000-0999999 - 1 - - - 1000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99937 - Macau - - - 0000000-1999999 - 1 - - - 2000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99938 - Srpska, Republic of - - - 0000000-1999999 - 1 - - - 2000000-5999999 - 2 - - - 6000000-8999999 - 3 - - - 9000000-9999999 - 2 - - - - - 978-99939 - Guatemala - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99940 - Georgia - - - 0000000-0999999 - 1 - - - 1000000-6999999 - 2 - - - 7000000-9999999 - 3 - - - - - 978-99941 - Armenia - - - 0000000-2999999 - 1 - - - 3000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99942 - Sudan - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99943 - Albania - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99944 - Ethiopia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99945 - Namibia - - - 0000000-4999999 - 1 - - - 5000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99946 - Nepal - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99947 - Tajikistan - - - 0000000-2999999 - 1 - - - 3000000-6999999 - 2 - - - 7000000-9999999 - 3 - - - - - 978-99948 - Eritrea - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99949 - Mauritius - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-8999999 - 1 - - - 9000000-9899999 - 3 - - - 9900000-9999999 - 2 - - - - - 978-99950 - Cambodia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99951 - Reserved Agency - - - 0000000-9999999 - 0 - - - - - 978-99952 - Mali - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99953 - Paraguay - - - 0000000-2999999 - 1 - - - 3000000-7999999 - 2 - - - 8000000-9399999 - 3 - - - 9400000-9999999 - 2 - - - - - 978-99954 - Bolivia - - - 0000000-2999999 - 1 - - - 3000000-6999999 - 2 - - - 7000000-8799999 - 3 - - - 8800000-9999999 - 2 - - - - - 978-99955 - Srpska, Republic of - - - 0000000-1999999 - 1 - - - 2000000-5999999 - 2 - - - 6000000-7999999 - 3 - - - 8000000-9999999 - 2 - - - - - 978-99956 - Albania - - - 0000000-5999999 - 2 - - - 6000000-8599999 - 3 - - - 8600000-9999999 - 2 - - - - - 978-99957 - Malta - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9499999 - 3 - - - 9500000-9999999 - 2 - - - - - 978-99958 - Bahrain - - - 0000000-4999999 - 1 - - - 5000000-9399999 - 2 - - - 9400000-9499999 - 3 - - - 9500000-9999999 - 3 - - - - - 978-99959 - Luxembourg - - - 0000000-2999999 - 1 - - - 3000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99960 - Malawi - - - 0000000-0699999 - 0 - - - 0700000-0999999 - 3 - - - 1000000-9499999 - 2 - - - 9500000-9999999 - 3 - - - - - 978-99961 - El Salvador - - - 0000000-2999999 - 1 - - - 3000000-3699999 - 3 - - - 3700000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99962 - Mongolia - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99963 - Cambodia - - - 0000000-4999999 - 2 - - - 5000000-9199999 - 3 - - - 9200000-9999999 - 2 - - - - - 978-99964 - Nicaragua - - - 0000000-1999999 - 1 - - - 2000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99965 - Macau - - - 0000000-2999999 - 1 - - - 3000000-3599999 - 3 - - - 3600000-6299999 - 2 - - - 6300000-9999999 - 3 - - - - - 978-99966 - Kuwait - - - 0000000-2999999 - 1 - - - 3000000-6999999 - 2 - - - 7000000-7999999 - 3 - - - 8000000-9699999 - 2 - - - 9700000-9999999 - 3 - - - - - 978-99967 - Paraguay - - - 0000000-0999999 - 1 - - - 1000000-5999999 - 2 - - - 6000000-9999999 - 3 - - - - - 978-99968 - Botswana - - - 0000000-3999999 - 1 - - - 4000000-5999999 - 3 - - - 6000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99969 - Oman - - - 0000000-4999999 - 1 - - - 5000000-7999999 - 2 - - - 8000000-9499999 - 3 - - - 9500000-9999999 - 2 - - - - - 978-99970 - Haiti - - - 0000000-4999999 - 1 - - - 5000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99971 - Myanmar - - - 0000000-3999999 - 1 - - - 4000000-8499999 - 2 - - - 8500000-9999999 - 3 - - - - - 978-99972 - Faroe Islands - - - 0000000-4999999 - 1 - - - 5000000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99973 - Mongolia - - - 0000000-3999999 - 1 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99974 - Bolivia - - - 0000000-0999999 - 1 - - - 1000000-2599999 - 2 - - - 2600000-3999999 - 3 - - - 4000000-6399999 - 2 - - - 6400000-6499999 - 3 - - - 6500000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99975 - Tajikistan - - - 0000000-2999999 - 1 - - - 3000000-3999999 - 3 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99976 - Srpska, Republic of - - - 0000000-0999999 - 1 - - - 1000000-1599999 - 2 - - - 1600000-1999999 - 3 - - - 2000000-5999999 - 2 - - - 6000000-8199999 - 3 - - - 8200000-8999999 - 2 - - - 9000000-9999999 - 3 - - - - - 978-99977 - Rwanda - - - 0000000-1999999 - 1 - - - 2000000-3999999 - 0 - - - 4000000-6999999 - 2 - - - 7000000-7999999 - 3 - - - 8000000-9749999 - 0 - - - 9750000-9999999 - 3 - - - - - 978-99978 - Mongolia - - - 0000000-4999999 - 1 - - - 5000000-6999999 - 2 - - - 7000000-9999999 - 3 - - - - - 978-99979 - Honduras - - - 0000000-3999999 - 1 - - - 4000000-7999999 - 2 - - - 8000000-9999999 - 3 - - - - - 978-99980 - Bhutan - - - 0000000-0999999 - 1 - - - 1000000-2999999 - 0 - - - 3000000-5999999 - 2 - - - 6000000-7499999 - 0 - - - 7500000-9999999 - 3 - - - - - 978-99981 - Macau - - - 0000000-1999999 - 1 - - - 2000000-2699999 - 0 - - - 2700000-7499999 - 2 - - - 7500000-9999999 - 3 - - - - - 978-99982 - Benin - - - 0000000-1999999 - 1 - - - 2000000-4999999 - 0 - - - 5000000-6899999 - 2 - - - 6900000-8999999 - 0 - - - 9000000-9999999 - 3 - - - - - 978-99983 - El Salvador - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-6999999 - 2 - - - 7000000-9499999 - 0 - - - 9500000-9999999 - 3 - - - - - 978-99984 - Brunei Darussalam - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-6999999 - 2 - - - 7000000-9499999 - 0 - - - 9500000-9999999 - 3 - - - - - 978-99985 - Tajikistan - - - 0000000-1999999 - 1 - - - 2000000-3499999 - 0 - - - 3500000-7999999 - 2 - - - 8000000-8499999 - 0 - - - 8500000-9999999 - 3 - - - - - 978-99986 - Myanmar - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-6999999 - 2 - - - 7000000-9499999 - 0 - - - 9500000-9999999 - 3 - - - - - 978-99987 - Luxembourg - - - 0000000-6999999 - 0 - - - 7000000-9999999 - 3 - - - - - 978-99988 - Sudan - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-5499999 - 2 - - - 5500000-7999999 - 0 - - - 8000000-8249999 - 3 - - - 8250000-9999999 - 0 - - - - - 978-99989 - Paraguay - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-6499999 - 2 - - - 6500000-8999999 - 0 - - - 9000000-9999999 - 3 - - - - - 978-99990 - Ethiopia - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-5499999 - 2 - - - 5500000-9749999 - 0 - - - 9750000-9999999 - 3 - - - - - 978-99992 - Oman - - - 0000000-1999999 - 1 - - - 2000000-4999999 - 0 - - - 5000000-6499999 - 2 - - - 6500000-9499999 - 0 - - - 9500000-9999999 - 3 - - - - - 978-99993 - Mauritius - - - 0000000-0999999 - 1 - - - 1000000-4999999 - 0 - - - 5000000-5499999 - 2 - - - 5500000-9799999 - 0 - - - 9800000-9999999 - 3 - - - - - 979-10 - France - - - 0000000-1999999 - 2 - - - 2000000-6999999 - 3 - - - 7000000-8999999 - 4 - - - 9000000-9759999 - 5 - - - 9760000-9999999 - 6 - - - - - 979-11 - Korea, Republic - - - 0000000-2499999 - 2 - - - 2500000-5499999 - 3 - - - 5500000-8499999 - 4 - - - 8500000-9499999 - 5 - - - 9500000-9999999 - 6 - - - - - 979-12 - Italy - - - 0000000-1999999 - 0 - - - 2000000-2999999 - 3 - - - 3000000-5449999 - 0 - - - 5450000-5999999 - 4 - - - 6000000-7999999 - 0 - - - 8000000-8499999 - 5 - - - 8500000-9999999 - 0 - - - - - 979-8 - United States - - - 0000000-1999999 - 0 - - - 2000000-2299999 - 3 - - - 2300000-3499999 - 0 - - - 3500000-3999999 - 4 - - - 4000000-8499999 - 4 - - - 8500000-8849999 - 4 - - - 8850000-8999999 - 5 - - - 9000000-9849999 - 0 - - - 9850000-9899999 - 7 - - - 9900000-9999999 - 0 - - - - - diff --git a/bookwyrm/isbn/__init__.py b/bookwyrm/isbn/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/bookwyrm/isbn/isbn.py b/bookwyrm/isbn/isbn.py deleted file mode 100644 index 4c3ba496b..000000000 --- a/bookwyrm/isbn/isbn.py +++ /dev/null @@ -1,71 +0,0 @@ -import os -import requests - -from xml.etree import ElementTree -from bookwyrm import settings - - -class IsbnHyphenator: - __range_message_url = "https://www.isbn-international.org/export_rangemessage.xml" - __range_file_path = os.path.join( - settings.BASE_DIR, "bookwyrm", "isbn", "RangeMessage.xml" - ) - __element_tree = None - - def update_range_message(self): - response = requests.get(self.__range_message_url) - with open(self.__range_file_path, "w", encoding="utf-8") as file: - file.write(response.text) - self.__element_tree = None - - def hyphenate(self, isbn_13): - if self.__element_tree is None: - self.__element_tree = ElementTree.parse(self.__range_file_path) - gs1_prefix = isbn_13[:3] - reg_group = self.__find_reg_group(isbn_13, gs1_prefix) - if reg_group is None: - return isbn_13 # failed to hyphenate - registrant = self.__find_registrant(isbn_13, gs1_prefix, reg_group) - if registrant is None: - return isbn_13 # failed to hyphenate - publication = isbn_13[len(gs1_prefix) + len(reg_group) + len(registrant) : -1] - check_digit = isbn_13[-1:] - return "-".join((gs1_prefix, reg_group, registrant, publication, check_digit)) - - def __find_reg_group(self, isbn_13, gs1_prefix): - for ean_ucc_el in self.__element_tree.find("EAN.UCCPrefixes").findall( - "EAN.UCC" - ): - if ean_ucc_el.find("Prefix").text == gs1_prefix: - for rule_el in ean_ucc_el.find("Rules").findall("Rule"): - length = int(rule_el.find("Length").text) - if length == 0: - continue - range = [ - int(x[:length]) for x in rule_el.find("Range").text.split("-") - ] - reg_group = isbn_13[len(gs1_prefix) : len(gs1_prefix) + length] - if range[0] <= int(reg_group) <= range[1]: - return reg_group - return None - return None - - def __find_registrant(self, isbn_13, gs1_prefix, reg_group): - from_ind = len(gs1_prefix) + len(reg_group) - for group_el in self.__element_tree.find("RegistrationGroups").findall("Group"): - if group_el.find("Prefix").text == "-".join((gs1_prefix, reg_group)): - for rule_el in group_el.find("Rules").findall("Rule"): - length = int(rule_el.find("Length").text) - if length == 0: - continue - range = [ - int(x[:length]) for x in rule_el.find("Range").text.split("-") - ] - registrant = isbn_13[from_ind : from_ind + length] - if range[0] <= int(registrant) <= range[1]: - return registrant - return None - return None - - -hyphenator_singleton = IsbnHyphenator() diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index 1dd8bf813..ac23de555 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -534,11 +534,11 @@ let BookWyrm = new (class { navigator.clipboard.writeText(text); tooltipEl.style.visibility = "visible"; tooltipEl.style.opacity = 1; - setTimeout(function() { + setTimeout(function () { tooltipEl.style.visibility = "hidden"; tooltipEl.style.opacity = 0; - }, 3000) - }) + }, 3000); + }); } /** diff --git a/bookwyrm/templates/book/book_identifiers.html b/bookwyrm/templates/book/book_identifiers.html index 3a92d9ecf..a0ad19f8d 100644 --- a/bookwyrm/templates/book/book_identifiers.html +++ b/bookwyrm/templates/book/book_identifiers.html @@ -6,7 +6,7 @@ {% if book.isbn_13 %}
{% trans "ISBN:" %}
-
{{ hyphenated_isbn13 }}
+
{{ book.isbn_13 }}
From c721e17aa04ff0a7d35c5513c31743c70f6bf913 Mon Sep 17 00:00:00 2001 From: Tara Sophia Roshan Date: Thu, 27 Jul 2023 17:45:02 -0500 Subject: [PATCH 10/23] Change wording from 'Save' to 'Update' I think this wording is more clear. --- .../templates/snippets/create_status/post_options_block.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bookwyrm/templates/snippets/create_status/post_options_block.html b/bookwyrm/templates/snippets/create_status/post_options_block.html index da4a03d75..9627ac9cd 100644 --- a/bookwyrm/templates/snippets/create_status/post_options_block.html +++ b/bookwyrm/templates/snippets/create_status/post_options_block.html @@ -16,7 +16,7 @@
{% trans "Copied ISBN!" %}
From 455b0c82eafa2edff623109c06cf4a62c0d22e29 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Tue, 1 Aug 2023 20:53:06 -0700 Subject: [PATCH 23/23] Fixes typo and outdated comment --- bookwyrm/management/commands/repair_editions.py | 2 +- bookwyrm/models/book.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/bookwyrm/management/commands/repair_editions.py b/bookwyrm/management/commands/repair_editions.py index d43ad6ca6..304cd5e51 100644 --- a/bookwyrm/management/commands/repair_editions.py +++ b/bookwyrm/management/commands/repair_editions.py @@ -3,7 +3,7 @@ from django.core.management.base import BaseCommand from bookwyrm import models -class Commmand(BaseCommand): +class Command(BaseCommand): """command-line options""" help = "Repairs an edition that is in a broken state" diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index 6a779b0f6..c213bf9ce 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -387,7 +387,6 @@ class Edition(Book): if self.parent_work: return - # assign this edition to the parent of the duplicate edition new_work = Work.objects.create(title=self.title) new_work.authors.set(self.authors.all())