Binnen het ISBN-10 (International Standard Book Numbering) systeem dat tot eind 2006 gebruikt werd, kreeg elk boek een unieke code toegewezen die bestaat uit 10 cijfers. De eerste 9 daarvan geven informatie over het boek zelf, terwijl het laatste louter een controlecijfer is dat dient om foutieve ISBN-10 codes te detecteren.

ISBN
ISBN in tekst en streepjescode.

Als $$x_1, \ldots, x_9$$ de eerste 9 cijfers van een ISBN-10 code voorstellen, dan wordt het controlecijfer $$x_{10}$$ als volgt berekend: \[x_{10} = (x_1+ 2x_2+ 3x_3+ 4x_4+ 5x_5+ 6x_6+ 7x_7+ 8x_8+ 9x_9)\!\!\!\!\mod{11}\] Het controlecijfer $$x_{10}$$ kan m.a.w. de waarden 0 tot en met 10 aannemen. Als het controlecijfer gelijk is aan 10, dan wordt dit in de ISBN-10 code genoteerd als de hoofdletter X. Op die manier wordt het controlecijfer altijd door één enkel karakter voorgesteld.

De cijfers van een ISBN-10 code worden verder opgedeeld in vier groepen, die van elkaar gescheiden worden door een koppelteken. De eerste en laatste groep bestaan telkens uit één cijfer, terwijl de twee middelste groepen elk uit vier cijfers bestaan.

Opgave

Schrijf een functie isISBN waaraan een string (str) moet doorgegeven worden die een ISBN-10 code voorstelt. De functie moet een Booleaanse waarde (bool) teruggeven die aangeeft of de gegeven ISBN-10 code geldig is. Een geldige ISBN-10 code is een string (str) van 13 karakters (10 cijfers en 3 koppeltekens), heeft een correct controlecijfer en is opgedeeld in groepen zoals hierboven staat beschreven.

Voorbeeld

>>> isISBN('9-9715-0210-0')
True
>>> isISBN('997-150-210-0')
False
>>> isISBN('9-9715-0210-8')
False

Pythia spreekt …

In onderstaande video legt Pythia uit hoe je deze opgave kunt aanpakken. Bekijk deze video als opstapje naar het oplossen van de oefeningen over lijsten en tuples1.