Entendendo os Códigos de Barras
Tá aí uma coisa que sempre me perguntam como funciona, desde os tempos em que eu dava aulas de hardware e web onde os alunos mostravam esta curiosidade aos dias de hoje com amigos programadores.
No caso existem vários tipos de códigos de barra. O mais famoso é o padrão FEBRAVAN utilizado para gerar boletos bancários temos também o UPC que é o padrão para códigos em produtos comercializados.
Neste artigo irei abordar o funcionamento no padrão UPC que julgo ser mais fácil pra quem está entrando no assunto agora. Num próximo artigo estarei explicando cada item dos boletos bancários.
Se você for olhar em sua geladeira ou despensa agora, descobrirá que todas as embalagens têm um código de barras UPC impresso. Na realidade, quase todos os itens que você compra em um supermercado, loja de departamentos e hipermercado têm um código de barras UPC.
O que é um código de barras UPC
"UPC" significa código universal de produtos. Os códigos de barras UPC foram originalmente criados para ajudar os mercados a aumentar a velocidade do processo de verificação na saída e melhorar o controle de inventário, porém o sistema estendeu-se rapidamente a todos os outros produtos de varejo por ser tão eficiente.
Os códigos UPC originaram-se em uma empresa chamada Uniform Code Council ,UCC (em inglês). Um fabricante solicita permissão para a UCC para entrar no sistema UPC. Para isso o fabricante paga uma taxa anual. Em troca, a UCC emite ao fabricante um número de identificação de fabricação de seis dígitos e fornece diretrizes de como usá-lo. Você pode ver o número de identificação do fabricante em todos os códigos UPC padrão de 12 dígitos, como este mostrado na parte de trás do livro "The Teenager's Guide to the Real World," (em inglês) publicado pela BYG Publishing (em inglês)
Você pode ver que este símbolo UPC impresso em uma embalagem tem duas partes:
- O código de barras legível por máquinas
- O número UPC de 12 dígitos legível por humanos
O número de identificação de fabricação da BYG Publishing são os seis primeiros dígitos do número UPC - 639382. Os cinco números seguintes - 00039 - são os números de ítem. Um funcionário da empresa, chamado coordenador UPC, é responsável pela alocação do número de item em produtos, garantindo que o mesmo código não seja utilizado em mais de um produto, retirando códigos à medida que produtos são retirados de linha, etc. Geralmente, cada item que um fabricante vende, assim como todos os tamanhos de embalagens e todas as novas embalagens deste item, necessitam de um código diferente. Então uma lata de Coca-Cola de 354ml necessita de um código de item diferente do que uma garrafa de Coca-Cola de 473ml, assim como um pacote de 6 latas de 354ml, um pacote com 12, uma caixa de 24 latas, e assim por diante. É tarefa do coordenador UPC manter todos estes números corretos.
O último dígito de um código UPC é chamado de dígito de verificação. Este dígito permite que o scanner determine se este número foi escaneado corretamente ou não. Aqui está como é calculado o dígito de verificação para os outros 11 dígitos do código, usando o código 63938200039, conforme do "The Teenager's Guide to the Real World" exemplificado acima:
- some o valor de todos os dígitos em posições ímpares (dígitos 1, 3, 5, 7 e 9).
6 + 9 + 8 + 0 + 0 + 9 = 32 - multiplique esse número por 3.
32 x 3 = 96 - some o valor de todos os dígitos em posições pares (dígitos 2, 4, 6, 8 e 10).
3 + 3 + 2 + 0 + 3 = 11 - some este valor ao valor no passo 2.
96 + 11 = 107 - para criar o código verificador, determine o número que, quando adicionado ao número do passo 4, seja múltiplo de 10.
107 + 3 = 110
Dessa forma, o dígito verificador é 3.
Cada vez que o scanner lê o código de barras de um item, ele executa este cálculo. Se o dígito de verificação calculado for diferente do dígito de verificação lido, o scanner sabe que algo saiu errado e que este item deve ser escaneado novamente.
Como o preço é determinado
Como você pode ver, não existe informação de preço codificada em um código de barras. Quando o scanner na verificação de saída escaneia um produto, a caixa registradora envia o número UPC ao computador central POS (ponto de venda) da loja para verificar o número UPC. O computador central envia de volta o preço real deste item neste exato momento.
Este método permite que a loja mude o preço quantas vezes quiser, por exemplo para refletir preços de venda. Se o preço estiver codificado no código de barras, os preços jamais podem mudar. Por outro lado, não codificar um preço fixo permite à loja uma maneira fácil de enganar clientes. Quando você ouve sobre "fraude do scanner" no noticiário, é sobre isto que o jornalista está dizendo. É inacreditavelmente fácil para uma loja elevar os preços por engano ou propositalmente.
Algo que você irá notar quando começar a olhar os códigos UPC em detalhes é que uma grande empresa tem as identificações da empresa com vários zeros. Aqui estão alguns:
- Post - 043000
- General Mills - 016000
- Del Monte - 024000
- Aveia Quaker - 030000
Aqui está o código de barras de uma garrafa de 3 litros de Coca-Cola diet:
Você pode ver que a identificação da empresa Coca-Cola é 049000. Porém, se você olhar em uma lata de Coca-cola ou a maioria das garrafas de 2 litros, você verá que o código UPC é menor - apenas oitos dígitos no total. Aqui está o código de barras de uma garrafa de 2 litros de Sprite:
Estes pequenos códigos de barras são chamados de números com zeros suprimidos. Existe um conjunto de regras sobre a criação destes números com zeros suprimidos a partir dos números completos, porém a idéia básica é omitir um conjunto de quatro dígitos, todos zeros. No caso do código UPC da Sprite, o 049 no começo são os três primeiros dígitos de identificação da empresa Coca-cola 049000. O 551 é o número de item desta garrafa de Sprite, abreviado de 00551. O zero no penúltimo dígito é o quarto dígito da identificação da empresa Coca-Cola. O dígito final é o dígito de verificação normal. O principal motivo para a existência dos números com zeros suprimidos é criar códigos de barras menores, para produtos com embalagens menores, como as latas de 354ml.
O primeiro dígito do número de identificação de fabricação é especial. Ele é chamado de caractere de sistema de números. A tabela a seguir mostra o que diferentes sistemas de números de caracteres significam:
0 | número UPC padrão (devem ter um zero para os números com zeros suprimidos) |
1 | reservado |
2 | itens de peso-aleatório (frutas, vegetais, carnes, etc.) |
3 | farmacêuticos |
4 | marcas em estoque para varejistas (Uma loja pode montar seus códigos próprios, porém nenhuma outra loja irá entendê-los.) |
5 | cupons |
6 | números UPC padrão |
7 | números UPC padrão |
8 | reservado |
9 | reservado |
Aqui está um exemplo de código de barras farmacêutico (caractere de sistema de número 3). Este é um frasco de 118ml de xampu anticaspa Selsun Blue:
Aqui está o exemplo de marca em estoque (caractere de sistema de número 4), neste caso de um vale presentes de R$ 21,50 da Toys R Us:
Como a Toys R Us é a única loja que sempre usa este código de barras - este é o único lugar onde os vales-presentes podem ser resgatados - a Toys R Us montou seu próprio código UPC para vales-presentes e então usa o sistema de número 4 para fazê-lo.
O que é código de cupom
O código de cupom é interessante (caractere de sistema de número 5). Se você já imaginou como um scanner pode ler um cupom e rejeitá-lo se você não tiver comprado o produto, aqui está a sua explicação. Aqui está um código de barras UPC de uma caixa de Post Honey Nut Shredded Wheat:
Aqui está o cupom do mesmo produto:
Você pode ver que o código de barras deste cupom começa com um 5 indicando que isto é um cupom. O número 43000 é a identificação da empresa Post. Os próximos três dígitos (186) são chamados de código família. Os próximos dois dígitos (70) são um código de valor. O dígito final é o código de verificação normal.
O código família e o código de valor são colocados arbitrariamente pelo coordenador UPC da empresa. Isto é feito porque um cupom é usado por toda uma família de produtos. Por exemplo, um cupom talvez sirva para quatro diferentes tipos de sabonetes feitos pela mesma empresa. Da mesma forma, o código de valor representa, arbitrariamente, o valor do cupom. A empresa envia ao varejista os dados que contam ao computador do varejista exatamente quais produtos se ajustam ao código de família, e exatamente quantos remover. Quando o cupom é escaneado, o computador POS:
- decodifica o código família
- verifica para garantir que o cliente comprou um item da família
- decodifica o código de valor
- envia o desconto novamente à máquina registradora
Na próxima vez em que você for a uma loja, pegue um produto - qualquer produto. Olhe para o seu código UPC: agora você já sabe o que significa!
Como posso decodificar as barras
Então, digamos que você gostaria de decodificar as barras atuais dos códigos de barras e mapear seus números. Isso será algo que o deixará vesgo, porém pode ser feito.
Em primeiro lugar, examine qualquer código de barras de 12 dígitos. Ele é composto por barras pretas e espaços brancos entre as barras. Suponhamos que a mais fina barra ou espaço que você vê (por exemplo, a primeira barra a esquerda) possa ser chamada de "uma unidade largura". As barras e espaços podem então ser vistos como tendo larguras proporcionais de uma, duas, três ou quatro unidades. Se você examinar qualquer código de barras pode ver exemplos destas quatro larguras.
O começo de qualquer código de barras é "1-1-1". Isto é, partindo da esquerda, você encontra uma unidade de largura de barra preta seguida de uma unidade de largura de espaço branco seguido por uma unidade de largura de barra preta (barra-espaço-barra). Seguindo o começo do código, os dígitos são codificados assim:
0 = 3-2-1-1 1 = 2-2-2-1 2 = 2-1-2-2
3 = 1-4-1-1 4 = 1-1-3-2 5 = 1-2-3-1
6 = 1-1-1-4 7 = 1-3-1-2 8 = 1-2-1-3
9 = 3-1-1-2
0 = 3-2-1-1 1 = 2-2-2-1 2 = 2-1-2-2
3 = 1-4-1-1 4 = 1-1-3-2 5 = 1-2-3-1
6 = 1-1-1-4 7 = 1-3-1-2 8 = 1-2-1-3
9 = 3-1-1-2
(Algo a observar: todas essas codificações apresentam a soma igual a 7).
Então vamos pegar esse código de barras como um exemplo:
o código embutido nas barras é 043000181706:
- o código de barras começa com o código padrão inicial de 1-1-1 (barra-espaço-barra).
- o zero é 3-2-1-1 (espaço-barra-espaço-barra).
- o quatro é 1-1-3-2 (espaço-barra-espaço-barra).
- o três é 1-4-1-1 (espaço-barra-espaço-barra).
- os próximos três zeros são 3-2-1-1 (espaço-barra-espaço-barra).
- no meio existe um padrão 1-1-1-1-1 padrão (espaço-barra-espaço-barra-espaço), que é muito importante pois significa que os números à direita estão visualmente invertidos!
- o um é 2-2-2-1 (barra-espaço-barra-espaço).
- o oito é 1-2-1-3 (barra-espaço-barra-espaço).
- o um é 2-2-2-1 (barra-espaço-barra-espaço).
- o sete é 1-3-1-2 (barra-espaço-barra-espaço).
- o zero é 3-2-1-1 (barra-espaço-barra-espaço).
- o seis é 1-1-1-4 (barra-espaço-barra-espaço).
- o último caractere é um 1-1-1 (barra-espaço-barra).
Divirta-se decodificando códigos de barras de 12 dígitos!
TENHO DE REFERNCIAR UM CODIGO DE 3 LETRA E 5 NUMEROS.
QUAL CODIGO DEVO ENTAO UTILIZAR?
O 8 OU 3X9 ??
EXEMPLO:
AAA12345 – VEJA QUE NAO DEIXEI ESPAÇO EM BRNACO
AAA 12345 – VEJA QUE DEIXEI UM ESPAÇO EM BRANCO…ESSE ESPAÇO EM BRANCO PODE DAR PROBLEMAS?….PREFIRO ESTE POIS COMO IREMSO GRAVAR E FACILITA IDENTIFICAÇÃO..
UTILIZANDO O 39 POR EXEMPLO..TENHO DE PAGAR ALGO PAR ALGUEM?? OU POSSO SIMPLESMENTE UTILIZAR? VISTOQ UE TEM ESTA FONTE PRONTA NA IMPRESSORA DE ETIQUETAS.
Boa tarde Everton,
O Padrão 39 é amplamente utilizado em códigos alphamunericos. Pode usar sem problemas.
http://www.macoratti.net/07/12/crys_c39.htm
Com relação aos espaços, se seu programa de leitura os suporta, pode trabalhar sem problemas. Mas tome cuidado, pois muitos programas de supermercados, farmacias entre outros, não os identificam, tornando suas etiquetas incompatives. Uma dica é utilizar um hifen para separar os dados. EX: (AAA-12345).
Interessante! Um post bem completo para entender o funcionamento da logística e distribuição de mercadorias através de códigos de barras. Obrigado por compartilhar. Felicidades!