Mostrando postagens classificadas por relevância para a consulta códigos de barras. Ordenar por data Mostrar todas as postagens
Mostrando postagens classificadas por relevância para a consulta códigos de barras. Ordenar por data Mostrar todas as postagens

quinta-feira, fevereiro 21, 2008

Código de Barras - Introdução

Nesta nova série vou falar um pouco sobre código de barras, comentando a sua leitura e impressão e as características de alguns tipos mais comuns. Ao final talvez me aventure a apresentar um código para gerar imagens destes tipos de códigos de barras.

Código de barras é uma das tecnologias usadas para a "auto identificação" (AutoID), ou seja, a captura de dados de forma automatizada. O objetivo principal da AutoID é a maior confiabilidade da informação capturada quando comparada com a transcrição por uma pessoa.

No código de barras a informação é codificada em uma sequência de barras separadas por espaços. Existem diversas formas padronizadas de fazer esta codificação, são as chamadas simbologias. Na forma mais comum, dita linear, temos uma única linha de barras paralelas. Existem também os chamados códigos 2D, organizados como uma matriz de barras ou pontos. Dependendo da simbologia, a informação pode estar codificada somente nas barras ou nas barras e espaços. O tamanho das barras e espaços pode ser variável porém tipicamente são sempre múltiplos inteiros de um fator. Este fator, que afeta diretamente a distância de leitura, é chamado de módulo ou simplesmente de dimensão X.

Como veremos com mais detalhes em outro post, a leitura dos códigos é ótica, com as barras e espaços sendo distinguidos e seus tamanhos determinados pelo contraste entre eles. Existe uma grande variedade de leitores, com diferentes custos e desempenhos. Alguns leitores são pequenos o suficiente para serem embutidos em coletores portáteis com tamanho e peso semelhante ao dos PDAs.

Respeitadas algumas pequenas restrições, os códigos de barras podem ser impressos pelos meios normais de impressão. Isto é uma vantagem na identificação de artigos para o varejo, pois o código pode ser produzido junto com a embalagem, sem custo adicional. Os códigos podem também ser impressos a custos razoáveis em etiquetas, inclusive sob demanda (com conteúdo determinado no momento da impressão). Os códigos podem também ser gravados em etiquetas de outros materiais (como metálicas) para ter maior durabilidade e resistir a processos de congelamento, aquecimento ou limpeza.

Embora os códigos de barra sejam mais visíveis no varejo, eles estão atualmente em uso em toda a cadeia lojística (nas fábricas, nos depósitos, nos transportes, etc).

Um código linear pode armazenar algumas dezenas de caracteres (e os 2D até mais que 1KByte), mas tipicamente o conteúdo possui cerca de uma dúzia de caracteres. Isto, combinado ao fato de que a atualização do código de barras requer a sua substituição, faz com que tipicamente o código de barras contenha um código que é usado como chave para consulta das informações em uma base de dados. Tomando um exemplo do dia-a-dia, o leitor no caixa do supermercado lê um código que o PDV usa para obter a descrição e o preço do produto.

Normalmente, o conteúdo do código de barras pode ser lido por qualquer um e o código pode ser facilmente duplicado (por exemplo por fotocópia). O primeiro ponto não é necessáriamente crítico, pois o código de barras contém a chave, não os dados, porém a duplicação pode impedir alguns usos (como o controle de acesso). Ocasionalmente é colocada uma máscara vermelho escura sobre o código e a leitura é feita por infra-vermelho para criar um código 'mais seguro'.

A grande limitação dos códigos de barras é a necessidade de visada direta para a leitura.

terça-feira, fevereiro 26, 2008

Código de Barras - Impressão

A impressão de código de barras consiste apenas em desenhar barras de tamanho certo no lugar certo. Simples não? Existem, porém, algumas sutilezas no processo. Indo direto ao ponto, um código de barras impresso perfeitamente tem as barras com bordas retas, largura precisa e alto contraste com os espaços, o que nem sempre é fácil de obter. Felizmente a maioria dos leitores consegue ler códigos de baixa qualidade.

Uso de Impressoras Gráficas Comuns

Impressoras comuns com capacidade gráfica podem ser utilizadas para imprimir código de barras, porém nem sempre com boa qualidade.

Um dos piores tipos de impressora para imprimir código de barras é a matricial. Um primeiro problema é a baixa resolução, o que faz com que uma barra tenha largura de poucos pontos. Some-se a isto o fato dos pontos serem redondos e temos bordas curvas e largura variável. Um segundo problema é que a impressão é feita por uma cabeça que se move na horizontal em uma carcaça que muitas vezes treme continuamente durante a impressão. Isto gera variações no posicionamento horizontal e problemas de alinhamento vertical. Por último existe a questão da fita de impressão. Quando nova ela costuma soltar muita tinta, gerando impressões borradas. À medida que vai ficando gasta, o contraste vai caindo.

As impressoras a jato de tinta estão longe de serem ideais para a impressão de código de barras, mas permitem gerar códigos bem satisfatórios. Os problemas de posicionamento horizontal e alinhamento vertical também ocorrem, porém a resolução é maior e a qualidade da impressão é bem constante durante a vida útil do cartucho. Por outro lado, dependendo da tinta e do papel pode ocorrer dos pontos sairem maiores do que o esperado, tornando as barras ligeiramente mais largas e os espaços mais estreitos.

As impressoras a laser são as que geram melhores códigos de barra entre as impressoras não específicas, apresentando boa resolução, poucos problemas de posicionamento horizontal e vertical ou de borrão.

Para imprimir um código de barras em uma impressora gráfica comum é preciso gerar a imagem do código. Isto pode ser feito através de programas específicos (como o que vou mostrar no final da série). Em algumas simbologias (mas não todas) cada caracter codificado corresponde a uma seqüência fixa de barras, o que possibilita criar uma fonte, neste caso o código pode ser gerado imprimindo diretamente o seu conteúdo com esta fonte.

Impressoras Específicas para Código de Barras

Existem impressoras específicas para quem necessita imprimir quantidades maiores de códigos de barras e/ou deseja uma qualidade maior. Estas impressoras possuem internamento as rotinas necessárias para criar as imagens do código, recebendo do micro (ou outro dispositivo controlador) comandos específicos para isto.

Um primeiro tipo são as impressoras térmicas direta, que usam tecnologia semelhante aos aparelhos de fax mais tradicionais. Estas impressoras possuem uma cabeça composta por uma série linear de elementos que podem ser aquecidos individualmente e assim gerar um ponto escuro em um papel sensível a temperatura (papel térmico). Um tamanhos típico destas cabeças é 10 polegadas, com uma densidade de 150 ou 200 pontos por polegada (6 ou 8 pontos por milímetro). Alguns modelos mais sofisticados chegam a ter cabeça de mais de 20 cm e resolução da ordem de 300 pontos por polegada (12 pontos por milímetro). Estas impressoras têm, portanto, uma boa resolução, nenhum problema de posicionamento horizontal e poucos problemas de alinhamento vertical (já que os elementos são fixo) e contraste praticamente constante. O problema desta tecnologia é a durabilidade da impressão, já que contraste vai caindo com o tempo quando o papel térmico é exposto à luz solar.

A alternativa mais profissional é a impressora de transferência térmica. Ela possui uma cabeça semelhante à térmica direta, porém a temperatura é utilizada para transferir a tinta de uma fita (ribbon) para um papel comum. Ao contrário da impressora matricial, na transferência térmica toda a tinta do ribbon é passada para o papel na primeira (e única) impressão. Isto garante uma qualidade homogênea de impressão, porém significa que para cada metro de papel impresso é gasto um metro de ribbon (independente de ter impressão).

Seguem alguns sites de fabricantes de impressoras específicas para código de barras:

segunda-feira, fevereiro 25, 2008

Código de Barras - Leitura

A leitura de código de barras é quase sempre feita de forma ótica, distinguindo as barras e os espaços pelo contraste. Uma das consequência disto é a necessidade de uma região vazia em torno do código de barras, a chamada margem ou zona de silêncio.

O contraste entre as barras e espaços depende das suas cores e da cor da luz utilizada na leitura. Normalmente a luz usada na leitura é o vermelho, o que significa, por exemplo, que barras vermelhas impressas sobre branco não serão legíveis.

Uma vez distinguidas as barras e espaços, o leitor determina as suas larguras relativas e faz a decodificação, o que inclui determinar qual a simbologia do código. Feita a decodificação, o leitor precisa passar adiante os caracteres decodificados. As forma mais comum são por comunicação serial assíncrona e emulação de teclado. No primeiro caso o sistema que vai utilizar o código precisa ter um tratamento da serial. No segundo caso a leitura é transparente para o sistema, o que tem a desvantagem de impedir um tratamento diferenciado conforme o código foi lido ou digitado.

As formas mais comuns de leitura são:
  • caneta ótica
  • leitor de fenda
  • leitor laser
  • leitor CCD (ou linear imager)
  • leitor de imagem

Vejamos alguns detalhes sobre elas.

Caneta

A caneta é uma forma extremamente barata e pouco confiável. A caneta possui uma fonte e um sensor de luz. A leitura é feito movimentando-se manualmente a caneta por sobre o código. A distância de leitura é muito baixa, tipicamente a ponta da caneta é encostada no código, o que traz desgate para ambos. Uma boa leitura depende principalmente da habilidade de manter uma velocidade constante.

Leitor de Fenda

É praticamemte igual à caneta, porém a fonte/sensor fica fixo e o código é que é movimentado.

Leitor Laser

No leitor laser um diodo laser gera um feixe de luz que incinde sobre um espelho que oscila, fazendo com que o ponto se movimente. O circuito e o mecanismo de um leitor laser pode atualmente ser encapsulado em um módulo de tamanho próximo ao de um apontador.

É comum encontrarmos os leitores laser operando de três formas:
  • Em um dispositivo segurado por um operador, como uma pistola ou coletor. Neste caso cabe ao operador apontar o feixe de luz para o código de barras.
  • Em um dispositivo fixo na frente do qual o qual o operador apresenta ou passa o objeto com código de barras, como nos leitores de supermercado. Para maior agilidade, neste caso é comum termos um leitor omnidirecional, onde são usados mais de um espelho e/ou diodo laser para gerar raios em várias direções de forma a garantir que um deles corte todas as barras do código independente de sua orientação. Existem até mesmo leitores ditos "tridimensionais" compostos de um plano vertical e um horizontal.
  • Em um dispositivo fixo que aponta para uma esteira onde os objetos com códigos de barras passam. Dependendo da libertada de posicionamento dos códigos na esteira, podem ser necessários vários leitores para garantir a leitura, criando os chamados túneis de leitura.
Uma dica sobre a leitura com leitores portáteis: ao incindir um feixe de luz em uma superfície temos um reflexão especular, mais intensa e com igual ângulo em relação à perpendicular, e a reflexão difusa, causada pelas imperfeiçoes da superfície e portanto menos intensa. Os leitores são normalmente projetados para operar com a reflexão difusa e podem ficar "ofuscados" pela reflexão especulara a curta distância. Por este motivo, a leitura costuma ser mais fácil quando o leitor é segurado com uma pequena inclinação em relaçaõ ao código.

Leitor CCD

O leitor CCD se assemelha ao sensor de um scanner de imagem: uma sequência linear de sensores de luz. Originalmente os leitores CCD operavam apenas com distâncias muito curtas (próximas ao contato), mas hoje existem modelos capazes de ler a algumas dezenas de centímetros. Embora o desempenho possa ser um pouco inferior que os leitores a laser, o leitor CCD é mais barato. Além disso, um dos fabricantes possui patentes que lhe garante royalties sobre os leitores laser fabricados pelos seus concorrentes, o que torna o leitor CCD mais atraente para eles.

Leitor de Imagem

O leitor de imagem é basicamente uma câmera digital. Através de processamento de imagem o código é localizado e as barras decodificadas. Normalmente os leitores de imagem permitem decodificação omnidirecional e suportam códigos 2D. É comum também permitirem o seu uso como uma câmera monocromática de baixa resolução. A desvantagem é que é necessário um processamento maior, o que torna a decodificação mais lenta. Graças à Lei de Moore, a cada ano isto é menos problemático.

Desempenho dos Leitores

O desempenho de um leitor é normalmente indicado por diagramas como o abaixo:


Estes diagramas indicam a que distância é possível a leitura de códigos, em função do tamanho da barra mais fina. No caso dos leitores laser, a largura do feixe aumenta com a distância, o que afeta a leitura de códigos largos. Isto também é indicado no diagrama.

Escolhendo um Leitor

O primeiro passo para escolher um leitor é definir os códigos que serão lidos: suas simbologias, quantidade de caracteres e tamanho da barra mais fina (o que junto com as informações anteriores define a largura do código). No caso de leitura em esteira, pode ser importante também a altura do código. Verifique também a necessidade de ler códigos danificados ou sujos.

O segundo passo é definir a forma de leitura (leitor manual ou fixo, etc).

O terceiro passo é definir a forma como o leitor se comunicará com o resto do sistema.

De posse destas informações, uma visita aos sites dos fabricantes indicará quais os modelos que atendem a estas especificações. Seguem alguns dos sites:

segunda-feira, março 03, 2008

Código de Barras - Código Intercalado 2 de 5

O código Intercalado 2 de 5 (I25) foi desenvolvido para melhorar a densidade do Código 2 de 5 Padrão (isto é, permitir colocar a mesma quantidade de informação em um espaço menor). É um código para números com uma quantidade par de dígitos (acrescenta-se um zero á esquerda se necessário). Cada seqüência de barras e espaços codifica dois dígitos, um nas barras e o outro nos espaços. Isto torna pouco viável a sua impressão através de uma fonte de letras.

A forma de codificação é idêntica à do Código 2 de 5 Padrão, porém aplicada a barras e espaços. São utilizadas duas larguras de elemento. O elemento mais largo deve ter duas a três vezes a largura do mais estreito. Cada caracter é codificado em uma sequência com 5 elementos, das quais 2 são largos e 3 são estreitos. O primeiro dígito é codificado nas barras da primeira seqüência, o segundo nos espaços da primeira seqüência, o terceiro nas barras da segunda seqüência e assim por diante.

Um código intercalado 2 de 5 é composto, no mínimo, do código de início, os códigos de dados e do código de fim. Um dígito de controle módulo 10 pode ser usado; neste caso o número codificado deve ter um número impar de dígitos, para resultar num número total de dígitos par.

As sequências utilizadas para os dígitos no Code Intercalado 2 de 5 são as mesmas do Código 2 de 5 Padrão, exceto que se aplicam tanto a barras como espaços:

Onde 'E' indica um elemento estreito e 'L' indica um elemento largo.

As marcas de início e fim fogem um pouco deste padrão:
  • o início é a seqüência: barra de largura 1, espaço, barra de largura 1, espaço
  • o fim é a seqüência: barra de largura 2, espaço, barra de largura 1
A largura de cada sequência é 14 a 18 módulos, dependendo da relação entre os elementos largos e estreitos. Considerando que não seja usado checksum e que o elemento largo tenha o dobro da largura do estreito, um código com n dígitos terá largura de 7*n+8 módulos:
  • 7 = 4 elementos de lagura 2 + 6 elementos de largura 1 para cada par de dígitos
  • 8 = largura das marcas de início e fim (4 módulos cada)
O Código Intercalado 2 de 5 não é um código robusto. Uma vez que as seqüencias de inicio e fim podem aparecer em alguns pares de dígitos, é possível (e relativamente fácil) fazer uma leitura parcial do código. Isto ocorre tipicamente ao se usar um leitor laser manual, com o feixe inclinado em relação ao código. Por este motivo, aplicações que requerem a leitura desta simbologia devem, sempre que possível, conferir o tamanho do código lido e rejeitar códigos com tamanho inferior ao esperado. Outra solução, para os casos em que múltiplos tamanhos precisam ser suportados, é exigir que barras horizontais acima e abaixo do código:

Por este motivo, a maioria dos leitores saem de fábrica com o I25 inibido ou limitado ao tamanho 14. Infelizmente o Intercalado 2 de 5 é ainda bastante utilizado, o que cria para os fornecedores de hardware e software os problemas de ensinar a configurar o leitor e explicar o porque de códigos inválidos serem capturados.

Um uso comum do I25 é na marcação de unidades múltiplas de varejo e atacado, no chamado ITF-14 ou DUN-14. O ITF-14 consiste no código de identificação do item (o EAN-13 que veremos no próximo post) acrescido de um dígito inicial que indica o modelo de embalagem (o que permite descobrir a quantidade de unidades na embalagem). Para evitar o problema de leitura parcial, o padrão DUN-14 estipula o uso das barras de proteção:

Um outro uso do I25 é nos documentos bancários brasileiros, consistindo o chamado Código Febraban. Este código possui tamanho fixo e dígito verificador, o que ameniza o problema da leitura imparcial. Padece porém de um tamanho exagerado (44 dígitos), muitas vezes não suportado pelos leitores projetados para o mercado americano ou europeu.

Do ponto de vista extritamente técnico, o código 128 substitui com vantagens o intercalado 2 de 5, apresentando densidade equivalente com muito maior robustez.

Atualizado em 18/jun/08 para corrigir o erro nos códigos de início e fim, detectado por José Roberto Vieira.

quinta-feira, abril 15, 2021

Memórias dos Anos 90: Código de Barras I

Embora a Seal viesse a trabalhar com muitas outras coisas, ela era conhecida principalmente por vender equipamentos relacionados a código de barras. Já escrevi alguns posts técnicos sobre isso, aqui vou dar uma visão mais geral sobre o assunto no contexto da Seal.


quinta-feira, fevereiro 28, 2008

Código de Barras - Código 2 de 5

O código 2 de 5, também chamado de Discreto 2 de 5, 2 de 5 Padrão e Industrial 2 de 5, é um código numérico de baixa densidade e porisso pouco usado. Ele é um código discreto, onde cada caracter corresponde diretamente a um padrão de barras distinto e de mesmo tamanho, o que permite a sua implementação através de um fonte de letras. É um código bastante antigo, existindo desde os anos 60.

O código 2 de 5 utiliza duas larguras de barra. A barra mais larga deve ter de duas a três vezes a largura da mais estreita. Cada caracter é codificado em uma sequência com 5 barras, das quais 2 são largas e 3 são estreitas (daí vem o 2 de 5). Os espaços entre as barras não contém informação e normalmente são da mesma largura que as barras estreitas. A distância entre um caracter e outro não é crítica mas deve ser de pelo menos uma barra estreita.

Além dos dígitos de 0 a 9 o código 2 de 5 possui sequências especiais para marcar o início e o fim do código.

Um código 2 de 5 é composto no mínimo do código de início, os códigos de dados e do código de fim. Um caracter de checksum (módulo 10) pode opcionalmente ser colocado entre o final dos dados e a marca do final.

As sequências utilizadas para os dígitos no Código 2 de 5 são:


Onde 'E' indica um elemento estreito e 'L' indica um elemento largo.

As marcas de início e fim fogem um pouco deste padrão:
  • o início é a seqüência: barra de largura 2, espaço, barra de largura 2, espaço, barra de largura 1, espaço
  • o fim é a seqüência: barra de largura 2, espaço, barra de largura 1, espaço, barra de largura 2, espaço
A largura de cada sequência é 14 módulos. Considerando que a barra larga tenha o triplo da largura da estreita, não seja usado checksum, um código com n dígitos terá largura de 15*n+ 16 módulos:
  • 15 = 2 barras de lagura 3 + 3 barras de largura 1 + 1 espaço após cada barra
  • 8 = largura das marcas de início e fim
Para calcular o checksum (opcional) some primeiro os dígitos, usando pesos 3 e 1 alternadamente da direita para a esquerda. Calcule o resto da divisão desta soma por dez. Se o resto for zero, o dígito é 0, senão é 10 - resto. Por exemplo:
Código 12345 
Pesos 31313

Soma 3+2+9+4+15 = 33
Resto 33 % 10 = 3
Dígito 10 - 3 = 7
O código 2 de 5 é um código em desuso, visto que permite codificar apenas dígitos e a densidade resultante é muito baixa. O código 128 (que veremos futuramente) permite codificar o conjunto completo de caracteres ASCII e é muito mais eficiente na codificação de dígitos.

No próximo post veremos um parente do 2 de 5, o Intercalado 2 de 5, que possui uma codificação bem mais compacta mas infelizmente possui alguns problemas práticos.

Atualização em 03/mar/08: a relação de largura entre as barras largas e estreitas pode variar de 2 a 3, acertos menores no texto.

quinta-feira, abril 29, 2021

Memórias dos Anos 90: Código de Barras III

 Vamos encerrar estas lembranças sobre código de barras falando num outro fornecedor de aparelhos para a Seal: a Accu-Sort. A Seal fechou a representação em torno da época que eu entrei, o primeiro treinamento foi bastante marcante.

O modelo 55, bem em surrado e sem a cor azul de fábrica.


quarta-feira, fevereiro 27, 2008

Código de Barras - Código 39

O código 39 ou código 3 de 9 é um código de uso genérico bastante popular. Ele é um código discreto, onde cada caracter corresponde diretamente a um padrão de barras distinto e de mesmo tamanho, o que permite a sua implementação através de um fonte de letras.

O código 39 utiliza duas larguras de elemento (um elemento é uma barra ou espaço). O elemento mais largo deve ter de duas a três vezes a largura do mais estreito. Cada caracter é codificado em uma sequência de 9 elementos, dos quais 3 são largos e 6 são estreitos (daí vem o 3 de 9). O primeiro e o último elemento são sempre barras. A distância entre um caracter e outro não é crítica mas deve ser de pelo menos um elemento estreito.

O código 39 permite codificar diretamente os dígitos, as letras maiúsculas e os caracteres especias - . [espaço] $ / + e %. A codificação ASCII completa pode ser obtida usando estes últimos quatro caracteres como um prefixo. Existe também uma sequência de elementos para indicar o início e fim do código (*). Esta sequência permite também ao leitor identificar o sentido em que as barras estão sendo percorridas.

Um código 39 é composto no mínimo do código de início (*), os códigos de dados e do código de fim (*). Um caracter de checksum (módulo 43) pode opcionalmente ser colocado entre o final dos dados e o '*' final.

As sequências utilizadas no Code 39 são:


Onde 'E' indica um elemento estreito e 'L' indica um elemento largo.

Uma característica interessante é que um erro na leitura de um único elemento (por falha na impressão ou na leitura) gera um caracter inválido, impedindo a leitura incorreta.

A largura de cada sequência é 12 a 15 módulos, dependendo da relação entre os elementos largos e estreitos. Considerando que a distância entre os caracteres seja de um módulo, que não seja usado checksum e que o elemento largo tenha o dobro da largura do estreito, um código com n caracteres terá largura de 13*(n+2)-1 módulos:
  • 13 = 3 elementos de lagura 2 + 6 elementos de largura 1 + 1 espaço ao final
  • n+2 = caractes + marcas de início e fim
  • -1 = descontando o espaço no final do último caracter
O checksum (opcional) é o resto da divisão da soma dos códigos de 0 a 42 dos caracteres de dados por 43. Por exemplo, para o texto "DQSOFT" o checksum é (13+26+28+24+15+29) % 43 = 6 que corresponde ao caracter '6'.

As características do code 39 facilitam a sua impressão e leitura, mas isto não é significativo para os dispositivos atuais (exceto no caso de se desejar usar um fonte de letra para gerar o código de barras). O código 128 (que veremos futuramente) permite codificar o conjunto completo de caracteres ASCII ocupando um espaço igual ou menor.

sexta-feira, fevereiro 22, 2008

Código de Barras x RFID

Atualmente falar em código de barras acaba gerando perguntas sobre RFID. Neste post vou falar rapidamente sobre o RFID e compará-lo ao código de barras.

É preciso um certo cuidado, pois RFID é uma tecnologia que padece da praga que mais destroi novas tecnologias: o exagero (ou hype). Outro ponto importante é que é uma tecnologia relativamente nova, na qual aperfeiçoamentos podem surgir rapidamente.

De uma forma simplificada RFID é uma tecnologia de AutoID na qual o leitor se comunica via rádio com um tag para obter a sua identificação. Existem dois tipos básicos de tags: os ativos e os passivos. Os ativos possuem uma bateria para acionar o rádio, os tags passivos utilizam a energia do sinal recebido do leitor para enviar a sua identificação. Os tags possuem uma indicação gravada na fábrica e inalterável, esta identificação é numero de cerca de uma centena de bits. Além desta identificação fixa alguns modelos possuem uma memória que pode ser alterada pelo leitor (que neste caso é mais propriamente um leitor/gravador).

A vantagem óbvia do RFID é não necessitar de visada direta. Por outro lado, é preciso uma ou mais antenas e o alcance é limitado (principalmente para os tags passivos). A leitura de vários tags que estejam simultaneamente na área de cobertura do leitor é um recurso relativamente novo e ainda limitado tanto na quantidade de tags suportados como no tempo necessário para a leitura e na taxa de leituras não realizadas com sucesso.

Embora a possibilidade de escrita no tag seja muito interessante, atualmente a quantidade de memória é baixa para os tags passivos (da ordem de uma centena de bits) e o processo de escrita é lento.

A padronização dos tags é também recente e ainda está driblando a questão de patentes (cabe lembrar que também nos leitores a laser de código de barras existem patentes envolvidas).

Periodicamente se fala na 'morte' do código de barras no varejo, com sistemas onde o cliente passaria com o carrinho de supermercado pelo caixa e os códigos dos produtos seriam auto-magicamente lidos. Exitem atualmente vários impecilhos para isto:
  • os tags de RFID são elementos que tem que ser afixados às embalagens. Mesmo que o preço dos tags caiam uma ordem de grandeza nos próximos anos eles continuariam sendo um custo adicional significativo para itens de menor valor.
  • as tecnologias atuais não permitem a leitura 'simultânea' de uma grande quantidade de tags em tempo curto e com taxa de perda próxima de zero
  • é relativamente simples bloquear o sinal RF em torno de um tag, impedindo a sua leitura.
Mesmo a principal vantagem do RFID, que é a leitura sem necessidade de visada, é vista com preocupações por algumas pessoas. A possibilidade da leitura do tag de forma não perceptível tem gerado preocupações de privacidade e segurança.

Resumindo, RFID é uma tecnologia cujas aplicações possuem uma certa intersecção com as do código de barras porém não é apropriada para substituí-lo em todas as situações (da mesma forma como o RFID permite aplicações que não são viáveis com o código de barras).

Encerrada esta pequena digressão, no próximo post vamos falar na leitura de código de barras.

quarta-feira, julho 09, 2008

Código de Barras - UPC-A

A aplicação mais visível dos código de barras é a identificação de produtos no varejo. A partir da leitura do código de barras no produto, o PDV determina a descrição e o preço do produto. As simbologias UPC e EAN foram desenvolvidas exatamente para esta aplicação.

Para que esta aplicação seja possível, é necessária uma disciplina na atribuição dos códigos aos produtos. Em primeiro lugar, as simbologias UPC e EAN não devem ser usadas para codificar informações quaisquer, elas devem ser usadas somente para codificar a identificação de produtos. Estas identificações, por sua vez, devem ser criadas conforme regras rígidas. Parte destas identificações são definidas por associações nacionais e internacionais e identificam o país e a empresa responsável pelo produto (normalmente o fabricante). Uma parte é definida pela empresa, existem regras rígidas para o reaproveitamente de códigos.

O código UPC-A é o código original para esta finalidade, tendo sido desenvolvido para o mercado americano. O UPC-A codifica uma identificação com doze dígitos. Para alguns produtos o código resultante é muito longo, porisso foi criada uma versão reduzida com seis dígitos, o UPC-E. Posteriormente o sistema de numeração foi expandido para uso mundial, surgindo o EAN-13 (com treze dígitos) e o EAN-8 (com oito dígitos). Nest post vamos examinar o UPC-A, nos posts seguintes veremos o UPC-E, EAN-13 e EAN-8.

Um código UPC-A é dividido em 4 partes:
  • O sistema de numeração (um dígito)
  • O código da empresa responsável (cinco dígitos)
  • O código do produto (cinco dígitos)
  • O dígito de controle (um dígito)
O sistema de numeração indica o que o código representa:

0 = códigos normais
1 = reservado
2 = produtos de peso variável (marcados na loja)
3 = produto farmacêutico
4 = uso livre dentro da loja
5 = cupons
6 = reservado
7 = códigos normais
8 = reservado
9 = reservado

O código da empresa é definido pela UCC e o código do produto é definido pela empresa. Obs.: mais recentemente a UCC tem criado códigos de empresa com mais de cinco dígitos, com a consequente redução no número de dígitos no código de produto.

Os códigos UPC-A são um subconjuntos dos códigos EAN-13, um código UPC-A pode ser transformado em um código EAN-13 simplesmente acrescentando um zero no início. A forma de codificação dos dois padrões é a mesma, vamos vê-la na próxima parte quando falarmos no EAN-13.

Dica útil: como descobrir qual o produto associado a um código? Procure o código no Google! No caso dos códigos UPC existe uma base de dados não oficial em www.upcdatabase.com.

domingo, junho 29, 2008

Código de Barras - UCC/EAN 128

O UCC/EAN 128 (renomeado mais recentemente para GS1-128) não é exatamente uma simbologia mas sim uma convenção para o formato de informações codificadas com a simbologia Code 128.

Nos posts anteriores desta série não nos preocupamos com o que estava sendo codificado em barras. Não exisitia nenhuma indicação nos dados codificados de qual era a informação, isto tinha que ser assumido pela aplicação que imprime ou lê os códigos. Por exemplo, um mesmo código de barras com conteúdo 081231 pode significar:
  • um código de produto (produto 081231 - rebimbela transversal)

  • um número de documento (contrato 1231 de 2008)

  • uma data de validade (31 de dezembro de 2008)
A situação fica mais complicada quando se deseja codificar mais de uma informação em um mesmo código de barras, principalmente se quisermos a flexibilidade de colocar as informações em qualquer ordem ou deixá-las opcionais.

O UCC/EAN 128 define não somente um estrutura para o conteúdo do código como identificações para os tipos de informação mais comuns.

Um UCC/EAN 128 é codificado com a simbologia Code 128 e deve obrigatoriamente começar com o símbolo FNC1. Em seguida temos uma série de pares . Os identificadores de aplicação (ou simplesmente AIs) são códigos numéricos de 2 a 4 dígitos que identificam a informação que o segue. Alguns AIs exigem informação com tamanho fixo e outros informação com tamanho variável. No primeiro caso um novo par pode vir logo em seguida; no segundo caso é necessário colocar um FNC1 para indicar o fim da informação.

No texto impresso abaixo das barras a convenção é apresentar os AIs entre parenteses; estes parenteses não são codificados nas barras.

Existe uma longa lista de AIs definidos a nível mundial pela GS1. Alguns deles estão na tabela abaixo:



De posse de uma tabela dos AIs suportados, uma aplicação pode fazer o 'parse' de um código de barras UCC/EAN-128, extraindo os dados que lhe interessam (independente da sua posição no código) e descartando demais.

quinta-feira, julho 10, 2008

Código de Barras - EAN-13

Como vimos no post anterior, a simbologia EAN-13 corresponde a uma expansão da simbologia UPC-A americana para o resto do mundo. Um código EAN-13 é dividido em 4 partes:


  • sistema de numeração (dois ou três dígitos)
  • código da empresa responsável (quatro a seis dígitos)
  • código do produto (três a cinco dígitos)
  • dígito de controle (um dígito)
O sistema de numeração é definido mundialmente e identifica quem é responsável pela atribuição do código da empresa. Por exemplo, o sistema 789 é o prefixo para os códigos controlados pela GS1 Brasil. Um código UPC-A é convertido em um EAN-13 simplesmente colocando um zero à esquerda, desta forma os sistemas 00 a 09 correspondem ao códigos americanos.

A divisão entre o código de empresa e código de produto pode ser variavel dentro de um sistema de numeração. Isto suporta um número pequeno de empresas com muitos produtos em conjunto com um número grande de empresas com poucos produtos.

O dígito de controle é calculado da seguinte forma:
  • Multiplique cada dígito do código por 1 (1o, 3o, 5o, 7o, 9o e 11o dígitos) ou por 3 (2o, 4o, 6o, 8o, 10o e 12o dígitos)
  • Some os produtos
  • Divida a soma por 10
  • Se o resto da divisão for 0, o dígito é zero senão é 10 - resto
Por exemplo, considerando o código 7897833700053:
  • (7*1 + 8*3 + 9*1 + 7*3 + 8*1 + 3*3 + 3*1 + 7*3 + 0*1 + 0*3 + 0*1 + 5*3) = 117
  • Resto da divisão por 10 é 7
  • O dígito é 10 - 7 = 3
Uma outra forma de descrever a mesma operação é:
  • Some os dígitos "pares" (1o, 3o, etc)
  • Some os dígitos "ímpares" (2o, 4o, etc) e multiplique por três
  • Some os dois resultados anteriores
  • O dígito é o valor que somado ao total resulte em um múltiplo de dez
A mesma fórmula vale para o UPC-A, lembrando que o primeiro dígito é zero.

A codificação em barras é ligeiramente confusa devido à necessidade de compatibilidade com o UPC-A. Um código EAN-13 possui a seguinte estrutura básica:
  • A marca de início, 101
  • O grupo da esquerda, composto pelos 2o, 3o, 4o, 5o, 6o e 7o dígitos
  • a marca central, 01010
  • O grupo da direita composto pelos 8o, 90, 10o, 11o, 12o e 13o dígitos
  • A marca de fim, 101
onde 0 corresponde a espaço e 1 corresponde a barra.

Note que na descrição acima não está incluído o primeiro dígito, que é o dígito adicional do EAN-13 em relação ao UPC-A. Este dígito é codificado como um bit de paridade dos dígitos do grupo da esquerda:

(I = Impar, P = Par)

A codificação dos dígitos em barra é diferente conforme o grupo em que ele está e, no caso dos dígitos no grupo esquerdo, da paridade definida pelo primeiro dígito; em todos os casos cada dígito ocupa 7 módulos:


Notar que com esta codificação cada dígito resulta em duas barras e dois espaços, com o tamanho a largura das barras e espaços variando de 1 a 4 módulos.

Exemplificando com o código 7897833700053:

  • O primeiro dígito é 7, o que corresponde à paridades I P I P I P
  • Marca de início é 101
  • O segundo dígito é 8, com paridade I, 0110111
  • O terceiro dígito é 9, com paridade P, 0010111
  • O quarto dígito é 7, com paridade I,0111011
  • O quinto dígito é 8, com paridade P, 0001001
  • O sexto dígito é 3, com paridade I, 0111101
  • O sétimo dígito é 3, com paridade P, 0100001
  • Marca central é 01010
  • O oitavo dígito é 7, 1000100
  • O nono dígito é 0, 1110010
  • O décimo dígito é 0, 1110010
  • O décimo-primeiro dígito é 0, 1110010
  • O décimo-segunto dígito é 5,1001110
  • O décim-terceiro dígito é 3, 1000010
  • Marca de fim é 101
O tamanho de um código EAN-13 ou UPC-A é de 3 + 6*7 + 5 + 6*7 + 3 = 95 módulos.

Um último detalhe é a forma tradicional de apresentação do código de barras, que pode ser visto no início do post. As barras das marcas de início, centro e fim se prolongam um pouco mais para baixo que as demais. Na representação em texto (o chamado humano-legível) o primeiro dígito é colocado à esquerda da marca de início e os demais abaixo das respectivas barras.

quinta-feira, setembro 16, 2021

Memórias dos Anos 90: O Personal Shopper System

Vou quebrar a sequência cronológica dos meus posts de memória e voltar alguns anos atrás para falar de um sistema que eu conheci nos anos 90 e que eu vi em prática recentemente: o PSS (Personal Shopper System). Neste sistema, o cliente do supermercado realiza ele mesmo a leitura dos códigos de barras dos produtos à medida em que os pega nas gôndolas (prateleiras) e coloca no carrinho. Parece uma viagem? Está funcionando desde os anos 90 em lojas do supermercado Albert Heijn na Holanda.


terça-feira, abril 15, 2008

Código de Barras - Código 128


A simbologia Code 128 procura corrigir as deficiências das simbologias vistas anteriormente, apresentando as seguintes características:


  • Capacidade de codificação de todo o conjunto ASCII (0x00 a 0x7F)
  • Possibilidade de codificação compacta de códigos numéricos
  • Checksum obrigatório, para maior confiabilidade
O Code 128 utiliza barras e espaços de tamanhos diversos (porém sempre múltiplos do módulo), organizados em 107 símbolos com largura de 11 módulos. O caracter correspondente a cada símbolo depende do conjunto de caracteres (subset) sendo usado. A marca de início do código indica o subset sendo utilizado inicialmente, símbolos especiais permitem alterar o subset no meio do código.

Existem 3 subsets, denominados A, B e C. O subset A permite codificar dígitos isolados, letras maiúsculas, caracteres especiais e os caracteres de controle. O subset B é semelhante ao A, porém os caracteres de controle são substituídos pelas letras minúsculas. No subset C, cada símbolo corresponde a um par de dígitos permitindo codificar números de forma compacta (como no intercalado 2de5).

Um código de barras Code 128 é composto por um Símbolo inicial (Start-A, Start-B ou Start-C), os símbolos correspondentes ao conteúdo, um símbolo com o checksum e o símbolo final (STOP) seguido de uma barra de largura dupla (poderíamos também considerar que o STOP possui largura 13 ao invés de 11).

As sequências de barra e espaços utilizadas pelo Code 128 são as seguintes (clique para ampliar):


onde '0' é um espaço e '1' é uma barra.

Um código composto de 'n' letras terá, portanto, a largura

11*(n+3)+2

11 = largura de um símbolo
3 = símbolos de início, checksum e fim
2 = barra dupla no vinal

Já um código com 'n' dígitos (n par) terá a largura 11*(n/2+3)+2 = 5,5*n + 35, o que é mais compacto que os 7*n+16 módulos do intercalado 2 de 5 sem checksum para n maior que 12. Além do checksum, o Code128 é mais seguro que o intercalado por ter marcas de início e fim.

O checksum é calculado somando-se o código do símbolo inicial aos códigos dos símbolos do conteúdo com peso 1, 2, 3, ... (da esquerda para a direita) e pegando-se o resto da divisão do total por 103.

Por exemplo, vamos considerar a codificação de DQSoft:

(104 + 1*36 + 2*49 + 3*51 + 4*79 + 5*70 + 6*84) mod 103 = 16

Quando um símbolo FNC1 é colocado logo depois do start, o conteúdo do código deve seguir uma estrutura definida. É o chamado GS1-128 (antigamente conhecido como UCC/EAN-128), que veremos no próximo post da série.

sexta-feira, dezembro 02, 2005

Apresentação

Estou finalmente me aventurando a fazer um blog, vamos ver se o trabalho e a família vão deixar algum tempo para colocar besteiras por aqui. Neste blog vou comentar sobre hardware e software e, mais ocasionalmente, banalidades. Neste primeiro post, um resumo da minha vida com computadores.

O meu contato com computadores começou no primeiro ano da faculdade, em 1977. A minha turma teve a discutível honra de ser a última turma da Poli (Escola Politécnica da Universidade de São Paulo) a usar cartões perfurados até o último ano (no ano seguinte foi inaugurada a sala de terminais de vídeo para os alunos).

Ao final de 81 me formei em Engenharia Eletrônica Digital e fui trabalhar na Scopus Tecnologia, no auge da reserva do mercado de informática. Trabalhei lá em firmware de terminais e depois no projeto de software para um dos primeiros micros brasileiros compatíveis com o IBM PC. Nesta época escrevi o meu primeiro livro da série PC Assembler, que foi publicado pela Editora Campus.

Em 86, chateado com as limitações de ser um desenvolvedor de software numa empresa primordialmente de hardware, fui para uma pequena software house a Humana Informática. Lá trabalhei no desenvolvimento de softwares de comunicação para PC que foram bem sucedidos no mercado. Infelizmente, veio o plano Collor bem num instante de mudança do mercado, com a ascensão do Windows e redes locais.

Após alguns anos dando murros em ponta de faca, fui para a Seal Eletrônica, uma empresa especializada em sistemas para captura automática de dados (leia-se coletores de dados e códigos de barras). Lá, além de desenvolver software para equipamentos móveis com comunicação por radio frequência, trabalhei como "desbravador de tecnologias" e gerente de projetos. Na virada do milênio tive uma curta experiência como Gerente de Produto.

Em 2002, decidi arriscar a sorte como empresário, abrindo a Tamid Tecnologia junto com um amigo (não por coincidência, colega na Scopus, Humana e Seal). A Tamid se especializa em software para equipamentos móveis (principalmente coletores e PDAs).

Dependendo do meu humor, nos próximos posts vou relembrar os bons tempos em que software de verdade se fazia em Assembler ou comentar as maravilhas tecnológicas atuais ou chutar previsões sobre o que está para vir.

segunda-feira, julho 14, 2008

Código de Barras - UPC-E

Completando a nossa vista rápida sobre os códigos UPC e EAN, veremos agora o código UPC-E. Como o EAN-8, o objetivo do UPC-E é gerar um código mais curto para produtos menores.

O caminho seguido para o UPC-E, entretanto, é diferente do EAN-8. Enquanto o EAN-8 utiliza uma numeração distinta do EAN-13 e requer que a empresa solicite o código à entidade responsável pela numeração, o UPC-E é uma compactação de certos códigos UPC-A. Os doze dígitos de um código UPC-A são reduzidos para os oito dígitos do UPC-E basicamente retirando os zeros no meio do UPC-E. Portanto, a todo código UPC-E corresponde um UPC-A (a recíproca obviamente não é verdadeira).

Lembrando, um código UPC-A é composto por um dígito de sistema de numeração, cinco dígitos de empresa, cinco dígitos de produto e um dígito de controle. Esquecendo por alguns instantes os dígitos de sistema de numeração e de controle, os dez dígitos restantes são codificados em seis dígitos da seguinte forma:

O dígito de controle do UPC-A é codificado no UPC-E através da paridade dos seis dígitos obtidos acima, de forma semelhante ao que vimos no EAN-13. O UPC-E se aplica somente aos sistema de numeração '0' e '1', o sistema de numeração determina os valores de paridade para cada dígito de controle:

A estrutura do UPC-E corresponde ao UPC-A sem o grupo do lado direito e com a marca de fim truncada:
  • A marca de início, 101
  • Os dígitos, codificados conforme indicado abaixo
  • A marca central concatenada com a marca de fim truncada, 010101
A codificação dos dígitos em barras usa a mesma tabela que o lado esquerdo do EAN-13:

(lembrando que '1' corresponde a uma barra e '0' a espaço)

O tamanho de um código UPC-E é, portanto, 3 + 6*7 + 5 = 50 módulos.

quinta-feira, dezembro 08, 2011

Balanço Anual do Blog: 2011

No começo do mês o DQSoft completou seis anos de vida. É hora do tradicional balanço anual.

quinta-feira, junho 10, 2021

Memórias dos Anos 90: Spectrum 24 (parte 2)

Nesta segunda parte vou falar sobre as mudanças na série 3000 de coletores para suportar o Spectrum24 e duas linhas novas de coletores. Espero que parte destas coisas tenha algum interesse mais geral que simplesmente listar modelos de equipamentos obsoletos...

As versões retail e industrial do PDT61xx, o PDT68xx e o VRC69xx

sexta-feira, julho 11, 2008

Código de Barras - EAN-8

Nos dois posts anteriores examinamos as simbologias UPC-A e EAN-13 que são normalmente utilizadas para identificar produtos no varejo. Entretanto, existem alguns itens que são pequenos demais para comportarem estes códigos. Por este motivo, existem as versões reduzidas UPC-E e EAN-8. Vamos examinar primeiro o EAN-8 que é o mais simples deles.

Como o nome sugere, o EAN-8 armazena 8 dígitos, assim divididos:
  • sistema de numeração (dois ou três dígitos)
  • código do produto (quatro a cinco dígitos)
  • dígito de controle (um dígito)
No EAN-8 o código do produto é definido pelo grupo responsável pelo sistema de numeração. Por exemplo, no caso do Brasil o sistema de numeração é 789 e o código do produto, com quatro dígitos, é definido pela GS1 Brasil.

O dígito de controle é calculado como no EAN-13, considerando 5 zeros à esquerda:
  • Some os dígitos "pares" (2o, 4o e 6o)
  • Some os dígitos "ímpares" (1o, 3o, 5o e 7o) e multiplique por três
  • Some os dois resultados anteriores
  • O dígito é o valor que somado ao total resulte em um múltiplo de dez
Por exemplo, considerando o código 78918344, o dígito 4 é obtido por
  • (7+9+8+4)*3 + (8+1+3) = 96
  • 10 - (96 % 10) = 4
Um código EAN-13 possui a seguinte estrutura básica:
  • A marca de início, 101
  • O grupo da esquerda, composto pelos primeiros quatro dígitos
  • a marca central, 01010
  • O grupo da direita composto pelos quatro últimos dígitos
  • A marca de fim, 101
A tabela para codificação dos dígitos em barras e a mesma do EAN-13, considerando todos os dígitos do grupo da esquerda com paridade impar.

O tamanho de um código EAN-8 é de 3 + 4*7 + 5 + 4*7 + 3 = 67 módulos.

sexta-feira, julho 18, 2008

Código de Barras - Outros

Existem várias simbologias além das que vimos nesta série. De uma forma geral elas são pouco usadas e/ou voltadas para aplicações muito específicas.

De vez enquando aparece alguém que escolheu aleatoreamente uma destas simbologias mais incomuns e encontra dificuldade em achar equipamentos e softwares que as suportem. Minha recomendação: utilize uma simbologia específica para o uso desejado (como o EAN-13) ; se não existir uma use o Code 128.

Esta página (em inglês) contém descrições curtas de várias simbologias. Algumas que merecem comentário:
  • Code 11: alta densidade, à custa da confiabilidade. Usada na identificação de equipamentos de telecomunicações.
  • Code 93: um aperfeiçoamento do Code39.
  • Codabar: uma simbologia usada principalmente em bolsas de sangue.
  • Pharmacode: código usado em bulas e embalagens de remédio.
  • GS1: uma simbologia recente para o varejo, potencialmente pode vir a ser muito usada.
  • Trioptic: uma variante do Code 39, usada principalmente para a marcação de fitas e outras midias magnéticas (normalmente em etiquetas coloridas).
Existem também os códigos ditos bidimensionais, que deixo para uma eventual nova série de posts.