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.

8 comentários:

Anônimo disse...

Olá Daniel, sou outro oldtimer, gostaria de lhe fazer um convite para ficarmos mais newtimers.
Marcelo Thalenberg marcelo.thalenberg@gmail.com
aguardo seu contato o meu blog é blo.mtcriativa.com.br.

Grato

Teresinha disse...

Estou tentando imprimir catões com codigo de barras 2 de 5, mas por quetões esteticas eu regulo o godigo a uma área no cartão, isso pode dar erros de leitura, me inique um programa que que faça o codigo 2 de 5 com chegem no modulo 11. obrigado

Daniel Quadros disse...

Teresinha,

Ao limitar o código a uma área do cartão, o importante é deixar um espaço antes e depois do código (zona de silêncio).

Não tenho muito contato com aplicações que gerem código de barras mas uma que já usei no passado é a BCoder (http://www.taltech.com/products/barcode_software.html) mas o preço é um pouco salgado.

Jose Roberto Vieira disse...

Daniel,
excelente este seu artigo: era o que eu estava procurando. Só uma dúvida. Conferi 3 boletos (unibanco, banespa e banco do brasil) e me parece que os códigos de início e fim são outros: talvez barra largura 1, espaço, barra largura 1 para o início, e barra largura 2, espaço e barra largura 1 para o fim. Poderia me confirmar isto ? Obrigado.
Salum

Daniel Quadros disse...

José Roberto,

Realmente, o meu texto estava errado. Já acertei, obrigado!

Rodrigo T. disse...

Olá! Estava a dias brigando com um script em java e xHTML para gerar o código bancário, mas nada. Depois das suas explicações me dei conta de que vários códigos "prontos" na Internet utilizam relação das barras 1 para fico e 3 para largo, o que está incorreto e o leitor não reconhece. Conforme você comentou o código utiliza relação 1 e 2 para as barras, ficando tudo certo. Fica a dica para quem estiver na mesma situação. Parabéns pelo post, muito útil!

Velociraptor-SP disse...

Boa Noite amigos, como vão !!! SOu novato nesse lance de código de barras e este é o primeiro artigo que pelo menos me esclareceu alguma coisa, pois ninguem se presta a explicar nada pra ninguem de graça hoje em dia. Obviamente não resolveu meu problema com Boletos Bancários, mas acendeu pelo menos uma luz no escuro onde eu estava, agora pelo menos sei que não da simplesmente pra substituir toda uma formula de calculo por uma fonte ttf pra ajustar o boleto. VALEU MESMO. Me deu uma direção. Agora cabe eu correr atrás tbm. Fiquem com DEUS e obrigado pelos esclarecimentos

Velociraptor-SP disse...

Boa Noite amigos, como vão !!! SOu novato nesse lance de código de barras e este é o primeiro artigo que pelo menos me esclareceu alguma coisa, pois ninguem se presta a explicar nada pra ninguem de graça hoje em dia. Obviamente não resolveu meu problema com Boletos Bancários, mas acendeu pelo menos uma luz no escuro onde eu estava, agora pelo menos sei que não da simplesmente pra substituir toda uma formula de calculo por uma fonte ttf pra ajustar o boleto. VALEU MESMO. Me deu uma direção. Agora cabe eu correr atrás tbm. Fiquem com DEUS e obrigado pelos esclarecimentos