Universālais produkta kods

thumb|UPC svītrkods
**Universālais produkta kods** (**UPC**; līdzvērtīgi: **UPC kods**) ir Amerikas Savienotajās Valstīs, Kanādā, Eiropā, Austrālijā, Jaunzēlandē un citur plaši izmantota svītrkodu simboloģija tirdzniecības vienību izsekošanai veikalos.

UPC (tehniski attiecas uz UPC-A) sastāv no 12 ciparu zīmēm, kas tiek unikāli piešķirtas katrai tirdzniecības vienībai. Paralēli radniecīgajam EAN svītrkodam, arī UPC ir svītrkods, ko, atbilstoši GS1specifikācijām, galvenokārt izmanto tirdzniecības vienību skenēšanai tirdzniecības vietās. UPC datu struktūras ir GTVN sastāvdaļa, un tās atbilst globālajai GS1 specifikācijai, kuras pamatā ir starptautiski standarti. Bet daži mazumtirgotāji (apģērbi, mēbeles) neizmanto GS1 sistēmu (drīzāk citas svītrkodu simboloģijas vai izstrādājumu numuru sistēmas). No otras puses, daži mazumtirgotāji izmanto EAN/UPC svītrkodu simboliku, taču neizmanto GTVN (tikai produktiem, kas tiek pārdoti viņu pašu veikalos).

Pētījumi parāda, ka UPC pieņemšana un popularizēšana ir stimulējusi inovācijas un veicinājusi starptautisko mazumtirdzniecības piegādes ķēžu izaugsmi.

## Vēsture
Voless Flints (*Wallace Flint*) 1932. gadā ierosināja automatizētu kases sistēmu ar perfokaršu pielietojumu. Bernards Silvers (Bernard Silver) un Normens Džozefs Vudlands, (*Normen Joseph Woodland*) Drexelas Tehnoloģiskā institūta (tagad ) maģistrants, izstrādāja vēršacs stila kodu un 1949. gadā pieteica patentu.

Sešdesmitajos gados un septiņdesmito gadu sākumā Ziemeļamerikas dzelzceļi eksperimentēja ar daudzkrāsainiem svītrkodiem vagonu izsekošanai, taču galu galā šī sistēma tika atmesta un aizstāta ar radio balstītu sistēmu ar nosaukumu Automatic Equipment Identification (AEI) .

Pārtikas nozares tirdzniecības asociāciju grupa 1973. gadā izveidoja Vienotā produkta koda padomi (UPCC), kas ar McKinsey &amp;amp; Company konsultantu Lerija Rasela (*Larry Russell*) un Toma Vilsona (*Tom Wilson*) palīdzību noteica skaitlisko formātu, kas tika paņemts par pamatu vienotajam produkta kodam. Tehnoloģiju firmas, tostarp Charegon, IBM, Litton-Zellweger, Pitney Bowes-Alpex, Plessey-Anker, RCA, Scanner Inc., Singer un Dymo Industries / Data General, padomē alternatīvus simbolu attēlojumu priekšlikumus. Simbolu atlases komiteja beidzot izvēlējās īstenot Džordža Dž. Lūrera (*George J.Laurer*) izstrādāto IBM priekšlikumu, taču ar nelielu fonta pārveidojumu cilvēkiem lasāmajā zonā.

Pirmā UPC svītrkodu marķētā prece, kas jebkad ir tikusi skenēta mazumtirdzniecības kasē, bija Wrigley's Juicy Fruit košļājamās gumijas 10 iepakojumu paciņa (50 plāksnītes), kas 1974. gada 26. jūnijā pulksten 8.01 tika nopirkta Marsh lielveikalā Trojas pilsētā, Ohaio. NCR kasē tika reģistrēts pieaugums par 67 centiem. Iepirkumu grozā bija arī citas ar svītrkodiem marķētas preces, bet gumija bija pirmā, kas tika paņemta pie kases. Gumijas paciņa tika izstādīta Smitsona institūta Amerikas vēstures muzejā Vašingtonā, DC

Marejs Edens (*Murray Eden*) bija universālā produkta koda svītrkodu izveidojušās komandas konsultants. Būdams Masačūsetsas Tehnoloģiskā institūta zinātnieku komitejas priekšsēdētājs, viņš palīdzēja *izvēlēties simbolu, kas izturētu sagaidāmo tehnoloģiju neizbēgami straujo attīstību.* Viņš izvēlējās fontu, un viņš nāca klajā ar ideju svītrkoda, kas ir nedroša sistēma, ja koda lasītājs nedarbojas, apakšā pievienot numurus.

## IBM piedāvājums
1969. gada beigās IBM deva uzdevumu Džordžam Lūreram Research Triangle Park (RTP) Ziemeļkarolīnā izpētīt, kā izgatavot lielveikala skeneri un etiķeti. 1970. gada beigās Hērds Būmeisters (*Heard Baumeister*) sniedza vienādojumus kā aprēķināt rakstzīmes collā, kas iespējams izmantojot divus IBM svītrkodus — Delta A un Delta B. 1971. gada februārī Būmeisters pievienojās Laureram.

1971. gada vidū Viljams "Bills" Krūzs (*William "Bill" Crouse*) izgudroja jaunu svītrkodu ar nosaukumu Delta C. Tas sasniedza četras reizes vairāk rakstzīmju collā kā Delta B. Delta B darbojās salīdzinot svītru un atstarpju platumus ar koda bitiem. Tas bija ārkārtīgi jutīgs pret tintes izplūšanu, kad pārāk liela tintes daudzuma vai spiediena dēļ abas svītras malas izpletās vai pārāk maza daudzuma dēļ tās sarāvās. Vēl sliktāk bija tas, ka svītru izplešanās vietās atstarpes saruka, un otrādi. Delta C sasniedza augstāku veiktspēju, tikai izmantojot virzīšanos no priekšas uz aizmuguri līdz svītru šķautnēm, ko neietekmēja nevienmērīga tintes izplatīšanās. Kods nodrošināja vislabāko veiktspēju, ja tam bija noteikta rakstzīmju kopa ar fiksētu atskaites attālumu, kas aptvēra lielāko daļu vai vēlams visu rakstzīmi. 1971. gada augustā Krūzs pievienojās skenera radīšanas centieniem. Arī pēc vairākiem mēnešiem viņi nebija panākuši nekādu progresu. Viņi zināja par RCA vēršacs etiķeti, kuru varēja skenēt ar vienkāršu taisnas līnijas lāzera skeneri, taču nolasāmā etiķete bija pārāk liela. Lai gan Litton Industries ierosināja līdz pusei nogrieztu vēršacs simbolu, kas samazinātu tā laukumu, tas joprojām bija pārāk liels un parādīja tādas pašas problēmas ar tintes smērējumiem kā RCA simbols. Atkārtošanas un pārbaudes iespēja bija pilnībā novērsta. Viņi zināja arī par daudzajiem citiem priekšlikumiem no visas pasaules, no kuriem neviens nebija reāli izmantojams.
thumb|300x300px| UPC etiķete, kas parāda Būmeistera priekšlikumu vispārīgās īpašības
1972. gada pavasarī Būmeisters paziņoja par izrāvienu. Viņš ierosināja etiķeti ar svītrām, kas bija nedaudz garākas par attālumu starp visiem svītrām, kuras bija jāizlasa vienā piegājienā. Šo etiķeti varēja skenēt ar vienkāršu "X" skeneri, kurš bija tikai nedaudz sarežģītāks nekā taisnās līnijas lāzera skeneris. Nākamajā dienā Būmeisters izteica priekšlikumu, ja etiķete tiktu sadalīta divās daļās, tad svītru garumus varētu samazināt gandrīz uz pusi. Šie divi priekšlikumi, salīdzinājumā ar vēršacs izmēru, samazināja svītrkoda laukumu līdz trešdaļai un pēc tam līdz sestdaļai. Labajā pusē redzamais attēls parāda Būmeistera piedāvāto etiķeti. Viņš nenorādīja ne uz vienu konkrētu svītrkodu, jo tas bija labi saprotams. Šodienas UPC etiķete ir viņa priekšlikums, atskaitot svītru kodu un desmit ciparus. Neilgi pēc tam Būmeisters pārgāja uz citu RTP sektoru.

Lūrers turpināja noteikt etiķetes detaļas un uzrakstīt priekšlikumu. NJ Woodland tika iecelts par projekta plānotāju un palīdzēja Lūreram rakstīt savu priekšlikumu.

Pirmajā Lūrera svītrkodu mēģinājumā tika izmantots Delta B. Iegūtais etiķetes izmērs bija apmēram sešas reiz trīs collas, kas bija pārāk liels. Krūzs ieteica Lūreram izmantot savu Delta C svītrkodu un iesniedza sava patenta kopiju, kurā bija burtu un ciparu rakstzīmju kopas paraugs un noteikumi citu izmēru alfabētu ģenerēšanai. Tas samazināja etiķetes izmēru līdz aptuveni 1,5”x 0,9”. Vēlāk Lūrers lūdza Krūza palīdzību pētījumā kā skeneris varētu atrast etiķeti. Viņi abi kopā definēja aizsargjoslas un etiķetes noteikšanas definīciju. Aizsargjoslas, arī identifikāciju spējai atšķirt pusetiķetes un mācību svītras skenera sliekšņa ķēdēm. Lūreram tagad bija pilnīga etiķetes definīcija, un viņš sāka rakstīt savu priekšlikumu.

Iepriekš Krūzam bija ideja par vienkāršu nūjiņu, ko nēsāt kā gredzenu un rokassprādzi. Viņš nolēma attīstīt šo zizli etiķetes parādīšanai.

1972. gada 1. decembrī IBM iesniedza Lūrera priekšlikumu Super Market komitejai Ročesterā, Minesotā — vietā, kur IBM varētu izstrādāt skeneri. Prezentācijas laikā Krūzs sniedza laboratorijas paraugdemonstrējumu, kur viņš ar gredzena nūjiņu lasīja UPC līdzīgas etiķetes. Papildus parasto etiķešu lasīšanai viņš izlasīja arī divas lappuses lielo centrālo uzlīmi priekšlikuma bukletā. Pēc tam viņš pievērsās lapai, kurā bija redzama uz galda novietotu marķētu priekšmetu fotogrāfija. Etiķetes bija mazas un kļūdainas izdrukātās fotogrāfijas izšķirtspējas dēļ, bet nūjiņa lasīja daudzas no tām. Šī demonstrācija parādīja tīra Delta C koda izturību. Priekšlikums tika pieņemts.

Mēnesi vēlāk, 1973. gada 1. janvārī, Krūzs atgriezās IBM Advanced Technology grupā, un Lūrers palika pilnībā atbildīgs par etiķeti.

Dymo Industries, rokas drukas ierīču ražotāji uzstāja, ka kodam ir jābūt neatkarīgam no rakstzīmēm, lai rokas drukas ierīces varētu drukāt svītrkodus uz vietas veikalā, gadījumā ja preces nebūtu marķētas ar ražotāja svītrkodiem. IBM akceptēja Dymo priekšlikumu un iekļāva IBM jaunākajā priekšlikumā.

Tika nolemts, ka abās etiķetes pusēs jābūt atšķirīgām ciparu rakstzīmju kopām. Rakstzīmju kopa, ko Lūrers ieguva no Delta C patenta, izmantoja septiņus drukājamus palielinājumus, katrā no kuriem tiktu izdrukātas divas svītras un divas atstarpes. Tādējādi tika iegūtas divdesmit rakstzīmju kombinācijas, taču bija divi pāri, kuriem, lasot pēc Delta C noteikumiem, tika piešķirti vieni un tie paši kodi. Tā kā ar astoņpadsmit rakstzīmēm nepietika, tad Lūrers mēģināja rakstzīmju kopai pievienot vēl vienu vienību. Tādējādi tiktu iegūtas divdesmit sešas Delta C rakstzīmes, kas ne tikai varētu nodrošināt abus decimālzīmju komplektus, bet pievienoja arī četrpadsmit procentus etiķetes platumam un attiecīgi — arī augstumam. Tas dotu par trīsdesmit procentiem palielinātu laukumu vai etiķeti 1,7”x 1,03”. Lūrers uzskatīja, ka tas nav pieņemami. Viņš atgriezās pie sākotnējā rakstzīmju komplekta ar divdesmit rakstzīmēm, bet no kurām četras bija divi pāri ar vienādu Delta C nolasījumu. Viņš nolēma izmantot tos visus. Lai pārus atšķirtu, viņam katrā no tiem vajadzētu izmērīt vienas svītras platumu, kas tos atšķirtu vienu no otra. Katram pārim šīs svītras būtu vienas vai divu vienību platumā. Lūrers Būmeistera vienādojumus šai kopai nepiemēroja. Viņš uzskatīja, ka tikai viena joslas platuma mērīšana nebūtu pārāk nopietna. Izrādījās, ka laukuma palielināšanai vairāk kā divas reizes, platums un augstums būtu jāpaaugstina vairāk nekā par piecdesmit procentiem. Vēlāk Lūrers atzina, ka šīs četras rakstzīmes katrā komplektā ir iemesls lielākajai daļai skenera lasīšanas kļūdu.

Matemātiķim Deividam Saviram (*David Savir*) tika uzdots pierādīt, ka simbolu var izdrukāt un tas atbilst uzticamības prasībām, un viņš, visticamāk, nezināja Būmeistera vienādojumus. Viņš un Lūrers kļūdu noteikšanas un korekcijas nolūkā desmit cipariem pievienoja vēl divus. Pēc tam viņi nolēma pievienot nepāra/pāra paritāti vienību skaitam, kurš katrā pusē ir aizpildīts ar svītrām. Nepāra/pāra paritāte ir paņēmiens, ko izmanto, lai bitu plūsmā noteiktu nepāra bitu kļūdu skaitu. Viņi nolēma izmantot nepāri vienā un pāri otrā pusē. Tas dotu papildu norādi par to, kura puse no biļetes tiek lasīta. Tas nozīmēja, ka labas nolasāmības nodrošināšanai, katras svītras platums būtu jānolasa precīzi. Tas nozīmēja arī to, ka būs zināma arī katra atstarpe. Prasība precīzi nolasīt katras svītras platumu būtībā noliedz Delta C priekšrocības, izņemot Delta C atsauces mērījumus. Šajā gadījumā, kā Delta C koda ēna, saglabājās vienīgi savādu rakstzīmju kopa un etiķetes izmērs. Izmērs joprojām tika aprēķināts kā Delta C kodam. Ja etiķetes izmērs, ņemot vērā nepieciešamos svītru platuma mērījumus, būtu bijis pareizi pārrēķināts, tad etiķete būtu pārāk liela, lai tā būtu pieņemama.

Mašīnbūvei un elektroniskajai projektēšanai parasti ir nepieciešamas vissliktākās konstrukcijas, kas izmanto zināmas pielaides. Daudziem svītrkodu inženieriem ar šādām lietām bija maz pieredzes un viņi vairāk izmantoja intuitīvas metodes. Tas arī bija Delta B koda sliktās veiktspējas un, visticamāk, RCA vēršacs skenera neveiksmes cēlonis.

Zemāk esošajā tabulā ir redzamas 1970. gadu sākumā pieejamās darbspējīgās etiķetes un to izmēri.

Ir pieņēmums, ka vēršacs satur tādu pašu informāciju un nolasāmības uzticamību.

## Salikums
Katrs UPC-A svītrkods sastāv no skenējamas melnu svītru un baltu atstarpju joslas virs 12 ciparu virknes. UPC-A svītrkodā nav atļauti burti, rakstzīmes vai cita veida saturs. Starp 12 ciparu numuru un melno joslu un atstarpēm ir savstarpēja atbilstība, ti, ir tikai viens veids, kā vizuāli attēlot katru 12 ciparu numuru, un ir tikai viens veids, kā attēlot katru melno svītru un atstarpju joslu skaitliski.

Katra UPC-A svītrkoda skenējamais laukums atbilst modelim SLLLLLLMRRRRRRE, kur S (sākuma), M (vidējā) un E (beigu) aizsargjoslas ikvienā UPC-A svītrkodā ir attēlotas vienādi un L (kreisajā) un R (labajā) sadaļā ir 12 kopīgi cipari, kas katru UPC-A padara unikālu. Pirmais cipars L norāda uz noteiktu ciparu sistēmu, kas sekojošajiem cipariem ir jāizmanto. Pēdējais cipars R ir kontrolcipars kļūdu konstatēšanai, kas skenējot vai manuāli ievadot svītrkodu ļauj atklāt dažas kļūdas. Aizsargjoslas atdala abas sešu ciparu grupas un nosaka termiņus.

Piezīme: UPC-A 042100005264 ir līdzvērtīgs UPC-E 425261 ar paritātes modeli "EOEEOO", ko nosaka UPC-A skaitļu sistēma 0 un UPC-A kontrolcipars 4.

### Formatējums
UPC-A svītrkodus, pielāgojoties dažādiem drukāšanas un skenēšanas procesiem, var izdrukāt dažādos blīvumos. Nozīmīgo dimensiju parametru sauc par x-dimensiju (atsevišķa moduļa elementa platums). Katras svītras (atstarpes) platumu nosaka, reizinot katras svītras (atstarpes) x-dimensiju ar moduļa platumu (1, 2, 3 vai 4 vienības). Tā kā katra aizsargjosla sastāv no divām svītrām, un katrs no UPC-A svītrkoda 12 cipariem sastāv no divām svītrām un divām atstarpēm, tad visi UPC-A svītrkodi sastāv tieši no × 2) + (12 × 2) = 30 svītrām, no kurām 6 apzīmē aizsargjoslas un 24 apzīmē ciparus.

UPC-A nominālajā izmērā x-dimensija ir 0,33 mm (0,013"). UPC-A nominālais simbola augstums ir 25,9 mm (1,02"). Svītras, kas veido S (sākuma), M (vidējo) un E (beigu) aizsargjoslas, tiek izstieptas uz leju par 5 reizes garākas par x-dimensiju, kā rezultātā nominālais simbola augstums ir 27,55 mm (1,08"). Tas attiecas arī uz UPC-A svītrkoda pirmā un pēdējā cipara svītrām. UPC-A var samazināt vai palielināt no 80% līdz 200%.

Klusajām zonām, kam ir jābūt vismaz 9 reizes platākām par x-dimensiju, ir jāatrodas abās UPC-A svītrkoda skenētās zonas pusēs. GTIN-12 svītrkodam, kas ir iekodēts UPC-A simbolikā, pirmais un pēdējais cilvēkiem salasāmās interpretācijas

cipars vienmēr tiek novietots ārpus simbola, ar nolūku apzīmēt klusās zonas, kas nepieciešamas UPC-A svītrkodu skeneru pareizai darbībai.

## Kodēšana
UPC-A svītrkodu vizuāli attēlo svītras un atstarpes, kurās iekodē 12 ciparu UPC-A numuru. Katru ciparu attēlo unikāls raksts, kas sastāv no 2 svītrām un 2 atstarpēm. Svītras un atstarpes ir mainīgā, 1, 2, 3 vai 4 moduļu, platumā. Cipara kopējais platums vienmēr ir 7 moduļi, attiecīgi UPC-A 12 bitu skaitlim kopumā ir nepieciešami 7 × 12 = 84 moduļi.

Kopējais UPC-A platums ir 95 moduļi: 84 ciparu moduļi (L un R sekcijas) apvienojumā ar 11 aizsargjoslu moduļiem S (sākumā), M (vidū) un E (beigās). S (sākuma) un E (beigu) aizsargjoslas ir 3 moduļu platumā, tajā tiek izmantota veidne *svītra-atstarpe-svītra,* kur katra svītra un atstarpe ir viena moduļa platumā. M (vidējā) aizsargjosla ir 5 moduļu platumā un tajā tiek izmantota veidne *atstarpe-svītra-atstarpe-svītra-atstarpe*, kur katra svītra un atstarpe arī ir viena moduļa platumā. Papildus minētajam, UPC-A simbolam ir nepieciešama klusā zona (papildus vieta 9 moduļu platumā) pirms S (sākuma) un aiz E (beigu) aizsargjoslas.

UPC-A kreisās puses cipariem (cipariem pa kreisi no M (vidus) aizsargjoslas) ir nepāra paritāte, kas nozīmē, ka kopējais melno svītru platums ir nepāra moduļu skaits. Turpretī labās puses cipariem ir pāra paritāte. Tādējādi UPC skeneris var noteikt, vai tas skenē simbolu no kreisās puses uz labo vai no labās puses uz kreiso (simbols ir apgriezts otrādi). Pēc S (sākuma) vai E (beigu) aizsargjoslas (tās ir vienādas, josla-starpa-josla, neatkarīgi no nolasīšanas virziena), skeneris vispirms redz nepāra paritātes ciparus, ja skenē no kreisās puses uz labo, vai pāra paritātes ciparus, ja skenē no labās puses uz kreiso. Izmantojot informāciju par paritāti/virzienu, otrādi apgriezts simbols skeneri nemulsinās. Kad skeneris saskaras ar apgrieztu simbolu, tas var to vienkārši ignorēt (daudzi skeneri pārmaiņus skenē no kreisās puses uz labo un no labās puses uz kreiso, tāpēc simbols tiks nolasīts nākamajā reizē) vai atpazīt ciparus un sakārtot tos pareizā secībā. Ciparu kodēšanai ir vēl viena īpašība. Labās puses cipari ir kreisās puses ciparu optiskais pretstats, t. i., melnās joslas tiek pārvērstas par baltiem laukumiem un otrādi. Piemēram, kreisās puses "4" ir *atstarpe×1 — josla×1 — atstarpe×3 — josla×2*, savukārt labās puses "4" ir *josla×1 — atstarpe×1 — atstarpe×1 — josla×3 — atstarpe×2*.

## Numerācija
UPC-A un UPC-E svītrkodu skaitu ierobežo to izveidē izmantotie standarti.

UPC-A: (10 iespējamās vērtības uz vienu kreiso ciparu ^ 6 kreisie cipari) × (10 iespējamās vērtības uz vienu labo ciparu ^ 5 labie cipari) = 100 000 000 000. UPC-E: (10 iespējamās vērtības vienam ciparam ^ 6 cipari) × (2 iespējamie paritātes modeļi katram UPC-E skaitlim) = 2 000 000.

### Ciparu sistēmas cipars
Tālāk ir aprakstītas visas iespējamās numerācijas sistēmas ar atbilstošo 12 ciparu UPC-A numerācijas shēmu LLLLLLLLLRRRRRR, kur L apzīmē numerācijas sistēmas ciparu un R kontrolciparu.

; 0—1, 6—9
: Lielākajai daļai produktu. Cipari LLLLLL ir ražotāja kods (piešķir vietējā GS1 organizācija), un cipari RRRRR ir produkta kods.
; 2
: Rezervēts vietējam lietojumam (veikals/noliktava), precēm, ko pārdod pēc mainīga svara. Precēm ar mainīgu svaru, piemēram, gaļai, svaigiem augļiem vai dārzeņiem, ja tie ir iesaiņoti veikalā, tad veikals vienības numuru nosaka pats. Šajā gadījumā LLLLLL ir vienības numurs, un RRRRR ir vai nu svars, vai cena, kur pirmais R nosaka, kurš no šiem numuriem tiek izmantots (0 svaram).
; 3
: Zāles pēc Nacionālā zāļu koda (NDC) numura. Farmaceitiskajiem līdzekļiem ASV kā NDC numuru izmanto UPC vidējos 10 ciparus. Lai gan tirdzniecības vietā parasti tiek skenēti tikai bezrecepšu medikamenti, uz NDC balstītus UPC kodus izmanto uz recepšu medikamentu un ķirurģisko produktu iepakojumiem, un šajā gadījumā tos parasti sauc par UPN kodiem.
; 4
: Rezervēts vietējai lietošanai (veikalā/noliktavā), bieži vienlojalitātes kartēm vai veikala kuponiem.
; 5
: Kuponi . Cipari LLLLL ir ražotāja kods, pirmie trīs RRR ir ģimenes kods (nosaka ražotājs), bet nākamie divi RR ir kupona kods, kas nosaka atlaides apmēru. Šos kuponus var dubultot vai trīskāršot.

### Kontrolcipara kalkulācija
UPC ir ietverts kontrolcipars, lai atklātu biežāk sastopamās datu ievadīšanas kļūdas. Piemēram, UPC-A kodos tiek izvēlēts kontrolcipars x_{12}, kas atbilst *kontrolcipara vienādojumam*:

: (3x_1 + x_2 + 3x_3 + x_4 + 3x_5 + x_6 + 3x_7 + x_8 + 3x_9 + x_{10} + 3x_{11} + x_{12}) \equiv 0 \pmod{10}.

Ja ievadītais kods neatbilst vienādojumam, tad tas ir nederīgs UPC-A kods.

UPC-A kontrolciparu var aprēķināt šādi:

# Saskaitiet ciparus nepāra skaitļos (pozīcijās (pirmais, trešais, piektais,..., vienpadsmitais).
# Rezultātu reiziniet ar 3.
# Pie rezultāta pieskaitiet ciparu summu pāra pozīcijās (otrajā, ceturtajā, sestajā, sestajā,..., desmitajā).
# Atrodiet rezultātu modulo 10 (ti, atlikumu pēc dalīšanas ar 10) un nosauciet to par M
# Ja M ir nulle, tad kontrolcipars ir 0; pretējā gadījumā kontrolcipars ir 

Piemēram, UPC-A svītrkodā "03600029145 *x* 12 ", kur  ir nezināmais kontrolcipars,  var aprēķināt šādi:

# Saskaitiet ciparus nepāra pozīcijās (0 + 6 + 0 + 2 + 1 + 5 = 14).
# Rezultātu reiziniet ar 3 (14 × 3 = 42).
# Pieskaitiet ciparus pāra pozīcijās (42 + (3 + 0 + 0 + 9 + 4) = 58).
# Atrodiet modulo 10 rezultātu (58 mod 10 = 8 = *M*).
# Ja M nav 0, tad atņemiet M no 10 ().

Tādējādi kontrolcipars  ir 2.

Kontrolciparu vienādojums ir izvēlēts tā, lai tam būtu saprātīgas kļūdu noteikšanas īpašības (skat. Lūna algoritmu).

* UPC-A spēj atklāt 100% vienciparu kļūdu.
*: Viena cipara kļūda nozīmē, ka tieši viens cipars ir nepareizs. Pieņemsim, ka kļūdainā un pareizā cipara modulo 10 starpība ir *d*. Vērtība *d* nevar būt nulle, jo tas nozīmētu, ka cipari ir vienādi, bet *d* var būt jebkura cita vērtība no {1, 2, 3, 4, 5, 6, 7, 8, 9}. Ja kļūdainais cipars ir nepāra pozīcijā (ar vērtību 1), tad kontrolcipara vienādojuma kreisās puses vienādojums mainās par *d*, un vienādība vairs nav nulle. Ja kļūdainais cipars ir pāra pozīcijā (ar vērtību 3), tad kreisā puse mainās par 3*d*, bet arī šī izmaiņa nav nulle modulo 10, tāpēc kontrolcipara vienādojums nav izpildīts.
* UPC-A var atklāt aptuveni 89 % transpozīcijas kļūdu. Konkrēti, ja un tikai tad, ja starpība starp diviem blakus esošiem cipariem ir 5, UPC-A nevar noteikt to pārnešanu.
*# Ja tiek pārcelti 2 blakus esošie cipari, tad vienam no cipariem *<big>a</big>* tiks piešķirts lielums 1, bet otram ciparam  tiks piešķirts lielums 3, kur *d* ir abu ciparu starpība. Ja cipari būtu pareizā secībā, tie dotu šādus rezultātus
*#:: 1a + 3b = 1a + 3(a+d) = 4a + 3d
*#: kontrolciparu vienādojuma kreisajā pusē. Transponētā secībā tie veido
*#:: 1b + 3a = 3a + 1(a+d) = 4a + d .
*#: LHS. Atņemot abus minētos elementus, aprēķina, cik lielā mērā tie maina LHS:
*#:: (4a + 3d) - (4a + d) = 2d
*#: Kļūda tiks konstatēta, ja modulārās izmaiņas nebūs nulle; ja  modulo 10, tad izmaiņas netiks konstatētas. Līdz ar to kļūda netiks atklāta tikai tad, ja rakstzīmju starpība  (ja , tad deģenerētā "transpozīcija" nebūs kļūda").
*# Pēc tam apsveriet, cik bieži transponēšanas attālums d ir 5.
Šī ir d-transpozīciju tabula UPC-A svītrkodiem, kur

 d \in \{0, 1, 2, \ldots, 9\}:

UPC-A svītrkodu d-transpozīciju tabula

Rinda **Summa** satur d-transpozīciju skaitu, tāpēc neatklājamo transponēšanas kļūdu īpatsvars ir (neņemot vērā transponēšanas, kurās *d = 0*):

\frac{10}{18 + 16 + 14 + 12 + 10 + 8 + 6 + 4 + 2}=\frac{10}{90}=11.111\ldots\%.

## Variācijas
UPC savā visizplatītākajā lietojumā tehniski attiecas uz UPC-A.

Pastāv arī citi UPC varianti:

* UPC-B ir 12 ciparu UPC versija bez kontrolcipara, kas izstrādāta Nacionālā zāļu kodeksa (NDC) un Nacionālā, ar veselību saistītā produkta koda vajadzībām. Tajā ir 11 cipari un 1 cipars kā produkta kods, un tas parasti netiek izmantots.
* UPC-C ir 12 ciparu kods ar produkta kodu un kontrolciparu; netiek plaši izmantots.
* UPC-D ir mainīga garuma kods (12 vai vairāk ciparu), kur 12. cipars ir kontrolcipars. Šīs versijas netiek plaši izmantotas.
* UPC-E ir sešciparu kods, kam ir ekvivalents UPC-A 12 ciparu kods ar ciparu sistēmu 0 vai 1.
* UPC-2 ir UPC papildinājums ar diviem cipariem, ko izmanto, lai norādītu žurnāla vai periodikas izdevumu.
* UPC-5 ir UPC papildinājums ar 5 cipariem, ko izmanto, lai norādītu ieteicamo mazumtirdzniecības cenu grāmatām.

Tā kā UPC tehnoloģiski noveco, tad paredzams, ka līdz 2010. gadam UPC-B un UPC-C vairs netiks plaši izmantoti. UPC-D standarts var tikt pārveidots EAN 2.0 standartā vai arī pilnībā izbeigts.

### UPC-E
Lai UPC svītrkodus varētu izmantot uz mazākiem iepakojumiem, kur pilns 12 ciparu svītrkods var nebūt piemērots, tika izstrādāta "nulles samazināta UPC versija", ko sauc par UPC-E, kurā numura sistēmas cipars, visas ražotāja koda pēdējās nulles un visas produkta koda sākuma nulles ir atceltas (izlaistas).

Šī simboloģija atšķiras no UPC-A ar to, ka tajā izmanto tikai sešciparu kodu, neizmanto M (vidus) aizsargjoslu un E (beigu) aizsargjoslu veido kā atstarpes josla-starpsvītra-starpsvītra-starpsvītra, t. i., UPC-E svītrkoda shēma ir SDDDDDDE. Veidu, kādā sešciparu UPC-E ir saistīts ar divpadsmitciparu UPC-A, nosaka UPC-E ciparu modelis un UPC-E paritātes modelis. Tas var atbilst tikai UPC-A ciparu sistēmai 0 vai 1, kuras vērtība kopā ar UPC-A kontrolciparu nosaka UPC-E kodēšanas paritātes modeli. Ja ražotāja koda ciparus apzīmē ar X, bet produkta koda ciparus — ar N, tad:

Piemēram, UPC-E 654321 var atbilst UPC-A 065100004327 vai 165100004324, atkarībā no kodēto ciparu UPC-E paritātes modeļa, kā aprakstīts tālāk:

UPC-E 654321 ar paritātes modeli "EOEOEO" (UPC-A 065100004327) varētu kodēt kā

1-1-1 4-1-1-1 1-2-3-1 2-3-1-1 1-4-1-1 2-2-1-2 2-2-2-1 1-1-1-1-1-1.

Svītrkods izskatītos šādi:

### EAN-13
EAN-13 tika izstrādāts kā UPC-A aizstājējs, pievienojot papildu ciparu katra UPC-A numura sākumā. Tādējādi teorētiski iespējamo unikālo vērtību skaits tika palielināts desmit reizes, sasniedzot 1 triljonu. EAN-13 svītrkodi norāda arī valsti, kurā atrodas uzņēmums, kas ir reģistrējis preci (kas var būt vai nebūt tā pati valsts, kurā prece ir ražota). Saskaņā ar GS1 valstu kodiem to nosaka koda trīs pirmie cipari. Katru UPC-A kodu var viegli pārvērst līdzvērtīgā EAN-13 kodā, UPC-A kodam pievienojot 0 ciparu. Tas nemaina kontrolciparu . Tagad visas tirdzniecības vietu sistēmas var saprast abus kodus vienādi.

EAN-8 ir EAN svītrkoda 8 ciparu variācija.

UPC lietošanas piezīmes:

* Pašlaik Ziemeļamerikā papildus produktiem, kas jau ir marķēti ar UPC, tiks pieņemti arī visi produkti, kas ir marķēti ar EAN.
* Produkti ar jau esošu UPC nav atkārtoti jāmarķē ar EAN.
* Ziemeļamerikā EAN pievieno par 30 % vairāk kodu, galvenokārt UPC cipariem no 00 līdz 09 pievienojot ciparus no 10 līdz 12. Tas ir spēcīgs stimuls, lai pakāpeniski atceltu UPC.

## Skatīt arī

* GS1 — Starptautiska piegādes ķēdes standartu organizācija
* Globālais tirdzniecības vienības numurs
* Starptautiskais produkta numurs

## Atsauces
 
22. Kas ir UPC ?  Pilna UPC forma  .

## Turpmākai lasīšanai

* 
*  Railroad bar code.
* 
* 

## Ārējās saites

* UPC History — ID History Museum — Where the history of the UPC lives
* UPC-Search.org Bezmaksas tiešsaistes UPC datu bāze