# Universal Product Code

Universal Product Code of UPC is een systeem voor artikelnummering met nummers van 12 cijfers (11 met daarachter een controlecijfer), met bijbehorende streepjescode. 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.
UPC wordt in de Verenigde Staten gebruikt om in winkels artikelen van een unieke codering te voorzien ten behoeve van het automatiseren van kassa-afhandeling en voorraadadministratie. Deze code werd ontwikkeld door George Laurer, een ingenieur bij IBM en werd in gebruik genomen in 1973.
Het streepjespatroon bestaat uit 95 eenheidsstreepjes (smalle streepjes met een vaste breedte; wel zijn sommige extra lang) die elk zwart (1) of wit (0) zijn: 7 per cijfer en een Startcode 101, een code van de vorm 0xxxxx1 voor elk van de eerste zes cijfers, Middencode 01010, een code van de vorm 1xxxxx0 voor elk van de laatste zes cijfers van de vorm 1xxxxx0, en een Eind-code 101: SLLLLLLMRRRRRRE. Elke letter x staat voor 1 of 0.
Dit is van de (met nog oningevulde waarden van x symmetrische) vorm (met lange zwarte eenheidsstreepjes aangegeven met twee enen boven elkaar):
Aangrenzende eenheidsstreepjes van dezelfde kleur zien er samen uit als een dikkere streep. Elke code van een cijfer bestaat uit twee zwarte (dunne of dikke) strepen, wat het aantal mogelijkheden voor een rijtje xxxxx zowel voor een L- als voor een R reduceert van 32 tot 20. Dit is nog steeds ruim voldoende, want er zijn er voor elk 10 nodig.
Er zijn dus in het zwart 2 lange eenheidsstreepjes, 12 korte strepen van variabele dikte, 2 lange eenheidsstreepjes, weer 12 korte strepen van variabele dikte, en 2 lange eenheidsstreepjes, in totaal 30 strepen. De ruimten tussen de zwarte strepen zijn witte strepen van variabele dikte, in totaal 29: 1 lang eenheidsstreepje, 1 streep tussen een lange en een korte zwarte streep, 11 korte strepen, 1 dun streepje tussen een korte en een lange zwarte streep, 1 dunne lange, 1 dunne tussen een lange en een korte zwarte streep, 11 korte strepen, 1 streep tussen een korte en een lange zwarte streep, en 1 lang eenheidsstreepje.
De omzetting van getallen naar streepjes is voor L anders dan voor R, zodat tussen een kort en een lang zwart streepje altijd wit zit, dus per zes cijfers 12 zwarte strepen, twee per cijfer. Doordat de twee zwarte strepen soms wat meer rechts en soms wat meer links van het cijfer staan door een brede witte streep links, respectievelijk rechts, valt dit simpele feit niet zo op. De rode accolades in de afbeelding illustreren het.
Als streepjes van dezelfde kleur naast elkaar worden gezien als één streep dan bestaan de L(inker)-codes steeds uit achtereenvolgens een witte, zwarte, witte en zwarte streep. Van de 20 mogelijkheden worden de volgende 10 gebruikt:
* 0: 0001101
* 1: 0011001
* 2: 0010011
* 3: 0111101
* 4: 0100011
* 5: 0110001
* 6: 0101111
* 7: 0111011
* 8: 0110111
* 9: 0001011
De R(echter)-codes zijn het complement (dus 1 wordt 0 en 0 wordt 1), dus achtereenvolgens een zwarte, witte, zwarte en witte streep:
* 0: 1110010
* 1: 1100110
* 2: 1101100
* 3: 1000010
* 4: 1011100
* 5: 1001110
* 6: 1010000
* 7: 1000100
* 8: 1001000
* 9: 1110100
UPC wordt buiten de VS nauwelijks gebruikt. In plaats daarvan wordt GTIN-13 gebruikt, waarbij een zelfde patroon van evenveel streepjes een nummer van een cijfer meer representeert.