Tot slot wordt de controle van een streepjescode afgewerkt.
Herneem de logische functie is_geldig_upc(upc)
uit Universal Product Code - vervolg1
De twee eerste controles (lengte en de structuur SLLLLLLMRRRRRRE) blijven behouden. De derde controle wordt verder uitgewerkt:
Elk links blokje L en elk rechts blokje R moeten overeenkomen met een cijfer.
De 12 cijfers worden gebruikt voor artikelnummering. De eerste 11 cijfers vormen het artikelnummer, het twaalfde cijfer is een controlecijfer. Het controlecijfer is zodanig dat de som van de cijfers op even posities plus drie maal de som van de overige cijfers een 10-voud is. Voeg ook deze controle toe.
Gebruik hierbij functies uit de vorige oefeningen en de lijst:
cijfers= ["0001101","0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011"]
De S, M en E zijn juist toegevoegd in de UPC-code “10101110110110111000101101011110100011011101101010101000010010001001110101000010001001100110101”
Er zijn zes L-blokjes:
"0111011" -> 7 "0110111" -> 8 "0001011" -> 9 "0101111" -> 6 "0100011" -> 4 "0111011" -> 7
En zijn zes R-blokjes:
"1010000" -> 6 "1001000" -> 8 "1001110" -> 5 "1010000" -> 6 "1000100" -> 7 "1100110" -> 1
Het artikelnummer is dus “78964768567” en het controlegetal is “1”.
Reken na: 7 + 9 + 4 + 6 + 5 + 7 = 38 en 8 + 6 + 7 + 8 + 6 + 1 = 36
En 36 + 3*38 = 150 is deelbaar door 10
>>> is_geldig_upc("10101110110110111000101101011110100011011101101010101000010010001001110101000010001001100110101")
True