Code 128 vs Code 39: Qual Formato de Codigo de Barras Usar

Comparativo tecnico entre Code 128 e Code 39: caracteres suportados, densidade, usos ideais e quando migrar de um para o outro.

Code 128 e Code 39 sao os dois formatos de codigo de barras alfanumerico mais usados no mundo. Ambos sao suportados por praticamente todos os scanners modernos, mas tem diferencas tecnicas importantes que os tornam mais adequados para diferentes situacoes. Neste guia, vamos comparar os dois em detalhe.

Historia e origens

Code 39 foi criado em 1974 por David Allais e Raymond Stevens da Intermec. Foi um dos primeiros formatos a suportar letras alem de numeros, o que o tornou muito popular em ambientes industriais e governamentais nos anos 80 e 90.

Code 128 foi criado em 1981 por Ted Williams da Laserlight Data Systems. Foi projetado para superar as limitacoes do Code 39, oferecendo maior densidade e suporte a todos os 128 caracteres ASCII.

Conjunto de caracteres

Esta e a diferenca mais importante:

Code 39 suporta:

  • Letras A-Z (apenas maiusculas)
  • Digitos 0-9
  • Caracteres especiais: espaco, -, ., $, /, +, %
  • Total: 43 caracteres possiveis

Code 128 suporta:

  • Letras A-Z (maiusculas e minusculas)
  • Digitos 0-9
  • Todos os caracteres especiais e de controle ASCII
  • Total: 128 caracteres possiveis (daí o nome)

Se voce precisa de letras minusculas, Code 128 e obrigatorio.

Densidade: Code 128 e mais compacto

Para a mesma sequencia de dados, Code 128 ocupa menos espaco fisico que Code 39. Isso porque:

  • Code 39 usa 9 elementos (barras e espacos) por caractere, dos quais 3 sao largos
  • Code 128 usa codificacao variavel mais eficiente, especialmente o Subset C para numeros

Exemplo pratico: O texto “ABC123” em Code 39 ocupa ~40mm a 2 pixels/modulo. Em Code 128, o mesmo texto ocupa ~28mm. A diferenca aumenta com sequencias mais longas.

Digito verificador

Code 39: O checksum e opcional. A maioria das implementacoes nao o usa. Isso simplifica a integracao com sistemas mais antigos que nao esperam um digito verificador.

Code 128: O checksum e obrigatorio e calculado automaticamente. Toda leitura de Code 128 valida o checksum — erros de leitura sao detectados automaticamente.

Velocidade de leitura e robustez

Para scanners modernos (imagem ou laser), a velocidade de leitura de Code 39 e Code 128 e praticamente identica — ambos sao lidos em milissegundos.

Para scanners laser muito antigos (anos 80-90), Code 39 pode ter maior compatibilidade pois e um formato mais antigo e simples.

Em ambientes com sujeira, oleo ou danos parciais: Code 128 e geralmente mais robusto graças ao checksum obrigatorio.

Quando usar Code 39

Use Code 39 quando:

  1. Voce tem scanners legados que nao suportam Code 128 — muito comum em industrias com equipamentos de 20+ anos
  2. O sistema de destino exige Code 39 — alguns sistemas de saude (hospitais, laboratorios) e governo usam Code 39 como padrao estabelecido
  3. Voce so usa caracteres suportados (A-Z, 0-9, -./+$%) — nao ha motivo tecnico para Code 128 nesse caso, mas Code 128 tambem funcionaria
  4. Ambientes militares e aeroespaciais — Code 39 e o padrao especificado em muitas normas militares americanas e europeias

Quando usar Code 128

Use Code 128 quando:

  1. Voce precisa de letras minusculas — Code 39 nao suporta
  2. Voce quer codigos menores para a mesma quantidade de dados
  3. Voce quer checksum automatico para maior confiabilidade
  4. Voce esta comecando do zero um novo sistema — Code 128 e o padrao moderno recomendado
  5. Logistica e rastreamento — GS1-128 (variante do Code 128) e o padrao da industria logistica mundial
  6. Codigos numericos longos — Code 128 Subset C armazena pares de digitos com densidade maxima

GS1-128: o padrao logistico

Uma observacao importante: em logistica e supply chain, o formato dominante e o GS1-128 (anteriormente chamado EAN-128), que e uma aplicacao do Code 128 com estrutura adicional de Identificadores de Aplicacao (AI) que definem o significado de cada campo de dado.

Exemplos de AI:

  • (00) = SSCC (Serial Shipping Container Code)
  • (01) = GTIN (Global Trade Item Number — tipo de produto)
  • (17) = Data de validade
  • (10) = Numero do lote

Se voce trabalha com grandes varejistas (ex: Walmart, Carrefour) ou distribuidores que exigem etiquetas GS1, certifique-se de usar GS1-128 com os IDs corretos.

Tabela de decisao

SituacaoRecomendacao
Novo sistema, sem restricoesCode 128
Equipamentos legados (pre-2000)Code 39
Letras minusculas necessariasCode 128
Norma militar/aeroespacialCode 39 (verificar norma especifica)
Logistica/supply chainGS1-128 (Code 128)
Saude/hospitalVerificar padrao local (varia)
Maximo de dados no menor espacoCode 128
Simplicidade maximaCode 39

Conclusao

Para novos projetos sem restricoes de equipamento legado, Code 128 e a escolha recomendada — e mais compacto, suporta mais caracteres e tem checksum obrigatorio. Code 39 permanece relevante em contextos com sistemas legados ou normas que o exigem especificamente. Ambos estao disponíveis gratuitamente nos nossos geradores de codigo de barras.

Ferramentas relacionadas