# Código Universal de Produtos

O Código Universal de Produto (UPC ou código UPC) é uma simbologia de código de barras amplamente utilizada mundialmente para rastreamento de itens comerciais em lojas.
A simbologia escolhida possui barras (ou espaços) de exatamente 1, 2, 3 ou 4 unidades de largura cada; cada dígito decimal a ser codificado consiste em duas barras e dois espaços escolhidos para ter uma largura total de 7 unidades, tanto na forma de paridade "par" quanto na forma de paridade "ímpar", o que permite a varredura em qualquer direção. "Padrões de guarda" especiais (3 ou 5 unidades de largura, sem codificação de dígito) são misturados para ajudar na decodificação.
Um UPC (tecnicamente, um UPC-A) consiste em 12 dígitos atribuídos exclusivamente a cada item comercial. A organização internacional GS1 atribui os dígitos usados tanto para o UPC quanto para o código de barras do Número de Artigo Internacional (EAN) relacionado. As estruturas de dados UPC são um componente dos Números Globais de Itens Comerciais (GTINs) e seguem a especificação GS1 global, que é baseada em padrões internacionais.

## História

Wallace Flint propôs um sistema de checkout automatizado em 1932 usando cartões perfurados. Bernard Silver e Norman Joseph Woodland, um estudante de pós-graduação do Drexel Institute of Technology, desenvolveram um código no estilo alvo e solicitaram a patente em 1949.
Na década de 1960 e início da década de 1970, as ferrovias da América do Norte experimentaram códigos de barras multicoloridos para rastrear vagões, mas esse sistema acabou sendo abandonado e substituído por um sistema baseado em rádio chamado Identificação Automática de Equipamento (AEI).
Em 1973, um grupo de associações comerciais da indústria de alimentos formou o Uniform Product Code Council (UPCC) que, com a ajuda dos consultores Larry Russell e Tom Wilson da McKinsey & Company, definiu o formato numérico que formou a base do Uniform Product Código. Empresas de tecnologia, incluindo Charegon, IBM, Litton-Zellweger, Pitney Bowes-Alpex, Plessey-Anker, RCA e Scanner. O Comitê de Seleção de Símbolos finalmente optou por implementar a proposta da IBM desenhada por George J. Laurer, mas com uma ligeira modificação na fonte na área legível por humanos.
O primeiro item com a marca UPC a ser escaneado em um caixa de varejo foi um pacote de 50 chicletes Wrigley's Juicy Fruit, comprado no supermercado Marsh em Troy, Ohio, às 8h01 em 26 de junho de 1974. A caixa registradora NCR registrou 67 centavos. O carrinho de compras também continha outros itens com código de barras, mas o chiclete foi o primeiro retirado no caixa. Um fac-símile do pacote de chicletes foi exibido no museu de história americana do Smithsonian Institution em Washington, DC.
Murray Eden foi consultor da equipe que criou o código de barras Universal Product Code. Como presidente de um comitê de cientistas do Instituto de Tecnologia de Massachusetts, ele ajudou a "selecionar um símbolo que resistiria à inevitável onda de tecnologia que estava por vir". Ele escolheu a fonte e teve a ideia de adicionar números na parte inferior, que é um sistema à prova de falhas, caso o leitor de código de barras não esteja funcionando corretamente.

## Proposta IBM

Por volta do final de 1969, a IBM, do Research Triangle Park (RTP), na Carolina do Norte, designou George Laurer para determinar como fazer um scanner e uma etiqueta de supermercado. No final de 1970, Heard Baumeister forneceu equações para calcular caracteres por polegada alcançáveis por dois códigos de barras IBM, Delta A e Delta B. Em fevereiro de 1971, Baumeister juntou-se à Laurer.
Delta B comparou as larguras das barras com a largura do espaço e os bits de código. Isso era extremamente sensível à propagação da tinta, onde níveis inadequados de tinta ou pressão fariam com que ambas as bordas de uma barra se espalhassem para fora ou encolhessem.
Em meados de 1971, William "Bill" Crouse inventou um novo código de barras chamado Delta C Ele alcançou quatro vezes mais caracteres por polegada do Delta B.
Delta C alcançou seu desempenho mais alto usando apenas bordas iniciais ou finais que não foram afetadas pela distribuição uniforme da tinta. O código proporcionou melhor desempenho quando tinha um conjunto de caracteres definido com uma distância de referência fixa que abrangia a maior parte ou, de preferência, todos os caracteres.
Na primavera de 1972, Baumeister anunciou um avanço. Ele propôs um rótulo com barras um pouco maiores que a distância entre todas as barras que precisavam ser lidas em uma única passagem. Esta etiqueta pode ser digitalizada com um simples scanner "X", apenas um pouco mais complexo do que o scanner a laser de linha reta. No dia seguinte, Baumeister sugeriu que se o rótulo fosse dividido em duas metades, o comprimento das barras poderia ser cortado quase pela metade.
Estas duas propostas reduziram a área do alvo em um terço e depois em um sexto. A imagem à direita mostra o rótulo proposto por Baumeister. Ele não especificou nenhum código de barras específico, pois isso era bem compreendido. Exceto pelo código de barras e dez dígitos a etiqueta UPC hoje é sua proposta. Pouco depois, Baumeister transferiu-se para outra área da RTP.
Mais tarde, Laurer pediu ajuda a Crouse sobre como o scanner poderia detectar uma etiqueta. Juntos, eles definiram barras de proteção e uma definição de como detectar o rótulo. As barras de proteção também forneceram identificação para discriminação de meio rótulo e barras de treinamento para os circuitos de limite do scanner. Laurer tinha uma definição completa do rótulo e começou a escrever sua proposta.
Em 1º de dezembro de 1972, a IBM apresentou a proposta de Laurer ao Super Market Committee em Rochester, Minnesota, local onde a IBM desenvolveria o scanner. Durante a apresentação, Crouse fez uma demonstração de laboratório onde leu rótulos semelhantes a UPC com sua varinha de anel. Além de ler as etiquetas normais, ele leu a grande etiqueta central de duas páginas no livreto da proposta. Ele então abriu uma página que mostrava uma foto de itens etiquetados sobre uma mesa. As etiquetas eram pequenas e defeituosas devido à resolução da foto impressa, mas a varinha leu muitas delas. Esta demonstração mostrou a robustez do código Delta C puro. A proposta foi aceita.
Como dezoito caracteres não eram suficientes, Laurer tentou adicionar uma unidade ao conjunto de caracteres. Isso rendeu vinte e seis caracteres Delta C que poderiam fornecer os dois conjuntos de caracteres decimais, mas também adicionou quatorze por cento à largura do rótulo e, portanto, à altura. Isso seria um aumento de trinta por cento na área ou uma etiqueta de 1,7”x1,03”. Laurer sentiu que isso não era aceitável.
Laurer voltou ao conjunto de caracteres original com vinte caracteres, mas quatro deles eram dois pares com a mesma leitura Delta C. Ele decidiu usar todos eles. Para distinguir entre os pares, ele mediria a largura de uma barra em cada um dos pares para distingui-los um do outro. Para cada par, essas barras teriam uma ou duas unidades de largura.
Laurer não aplicou as equações de Baumeister a este conjunto. Ele sentiu que apenas uma medição da largura da barra não seria muito séria. No final das contas, seria necessário um aumento de mais de cinquenta por cento na largura e na altura para um aumento de área de mais que o dobro. Laurer admitiu mais tarde que esses quatro caracteres em cada conjunto foram responsáveis pela maioria dos erros de leitura do scanner.
David Savir, um matemático, recebeu a tarefa de provar que o símbolo poderia ser impresso e atenderia aos requisitos de confiabilidade, e provavelmente não tinha conhecimento das equações de Baumeister. Ele e Laurer adicionaram mais dois dígitos aos dez para detecção e correção de erros.
Exigir que cada largura de bit seja lida com precisão basicamente anulou a vantagem Delta C, exceto para a medição de referência Delta C. Apenas o estranho conjunto de caracteres e o tamanho do rótulo permanecem como uma sombra do código Delta C. O tamanho ainda era o calculado para Delta C puro. Se o tamanho da etiqueta tivesse sido recalculado adequadamente, levando em consideração as medidas de largura de barra exigidas, a etiqueta teria sido grande demais para ser aceitável.
A engenharia mecânica e o projeto de circuitos eletrônicos geralmente exigem projetos de pior caso usando tolerâncias conhecidas. Muitos engenheiros que trabalhavam com códigos de barras tinham pouca experiência com essas coisas e usavam métodos um tanto intuitivos. Esta foi a causa do fraco desempenho do código Delta B e muito provavelmente da falha do scanner alvo da RCA.

## Composição

Cada código de barras UPC-A consiste em uma faixa digitalizável de barras pretas e espaços brancos acima de uma sequência de 12 dígitos numéricos. Nenhuma letra, caractere ou outro conteúdo de qualquer tipo pode aparecer em um código de barras UPC-A. Existe uma correspondência um-para-um entre um número de 12 dígitos e uma faixa de barras pretas e espaços brancos, ou seja, existe apenas uma maneira de representar visualmente cada número de 12 dígitos e existe apenas uma maneira de representar cada faixa de barras pretas e espaços em branco numericamente.
A área escaneável de cada código de barras UPC-A segue o padrão S L LLLLLMRRRRR R E, onde os padrões de guarda S (início), M (meio) e E (final) são representados da mesma maneira em cada código de barras UPC-A e no L As seções (esquerda) e R (direita) representam coletivamente os 12 dígitos numéricos que tornam cada UPC-A único. O primeiro dígito L indica um sistema numérico específico a ser usado pelos dígitos seguintes. O último dígito R é um dígito de verificação de detecção de erro, que permite que alguns erros sejam detectados na digitalização ou entrada manual. Os padrões de guarda separam os dois grupos de seis dígitos numéricos e estabelecem o tempo.
| UPC-A | UPC-E |
UPC-A 042100005264 é equivalente a UPC-E 425261 com o padrão de paridade "EOEEOO", que é definido pelo sistema numérico UPC-A 0 e pelo dígito de verificação UPC-A 4.