EAN-13

EAN-13 (sigla de European Article Number) é um código de barras no padrão EAN definido pela GS1, adaptado em mais de cem organizações membros GS1, para a identificação dos código de barras UPC. No EAN-13 o símbolo codifica treze números que estão divididos em quatro partes; dos treze dígitos, doze são dos dados referentes ao produto e um é o dígito verificador .

Exemplo de um EAN-13

Significado do código numérico do EAN-13

As quatro partes que compõem o código são:

  • Origem do Código de Barras
  • Empresa fabricante
  • Produto por ela produzido
  • Dígito verificador

Origem do Código de Barras

Exemplo de uma situação especial, neste caso um EAN-13 que codifica um ISBN sendo o prefixo o 978 - prefixo este destinado à codificação de ISBNs de livros

Diferente do mito popular, os primeiros números do código EAN não indicam a origem de produto ou empresa detentora da marca, e sim, a filial da GS1 onde o código foi originado. Portanto, um produto fabricado na China, porém com empresa detentora de marca Alemã, importado para o Brasil pode ter início 789 (primeiros dígitos comuns em território nacional), se tais códigos forem adquiridos diretamente com a GS1 Brasil ou mesmo prefixo destinado a outros países. Isto não interfere na utilização do código, pois o padrão EAN é universal.

Para o país de origem do código estão destinados os 3 primeiros dígitos caso se trate de unidades de consumo embora em situações especiais estes 3 primeiros dígitos sirvam para representar não o país onde o código foi gerado mas sim outro tipo de informação tal como os prefixos usados em: produtos de peso variável , produtos de quantidade variável , para uso in-store , para livros e publicações periódicas , para coupons e meios de pagamento , entre outras aplicações.

Empresa fabricante e produto por ela produzido

Seguindo o país de origem do código vêm os dígitos da empresa fabricante e do produto por ela produzido, no total a soma destes dois códigos resultará em 9 dígitos, sendo o número de dígitos de cada um deles dependente da necessidade de codificação de produtos de cada empresa . Por exemplo, uma empresa que produz uma quantidade de produtos diferentes elevada terá necessariamente de ter um código de identificação de empresa fabricante com menos dígitos para poder reservar um número de dígitos maior para identificar o produto por ela produzido. Assim como uma empresa de menor porte ou especializada em certo tipo de produtos, logo com uma quantidade de produtos diferentes menor terá um código de identificação de empresa fabricante com mais dígitos reservando assim menos dígitos para a identificação do produto por ela produzido. O código de empresa fabricante pode assim ter 4, 5 ou 6 dígitos; enquanto que o código de produto por ela produzido pode ter 3, 4 ou 5 dígitos . Existem também empresas que vendem os códigos de barras EAN de forma individual. Neste caso, o sistema acima deve ser desconsiderado. A compra avulsa de um código EAN oficial, padrão GS1, não altera a funcionalidade do mesmo.

Dígito verificador

Ver artigo principal: dígito verificador

É o último dígito no EAN-13 e é calculado com o auxílio de um algoritmo, é um mecanismo de autenticação para certificar a validade de um certo código numérico. Neste caso para verificar a validade dos primeiros 12 números do EAN-13.

Cálculo do dígito verificador EAN 13

Tomando como base o EAN 13 de número: 789100031550-?

   Multiplicam-se os dígitos do código por 1 e por 3, em sequência repetitiva de 1 e 3;   7 * 1 = 7   8 * 3 = 24   9 * 1 = 9   1 * 3 = 3   0 * 1 = 0   0 * 3 = 0   0 * 1 = 0   3 * 3 = 9   1 * 1 = 1   5 * 3 = 15   5 * 1 = 5   0 * 3 = 0   Somando o resultado das multiplicações encontra-se o total de 73.   O valor total da soma das multiplicações deve ser dividido por 10: (73/10 = 7.3)   Transforme o resultado em inteiro, "arredondando" o número para baixo. (7)   Some 1 ao resultado da divisão:  (7+1 = 8)   Multiplique o resultado dessa soma por 10: (8*10 = 80)   Subtraia desse resultado o valor da soma inicial das multiplicações "73": (80 - 73 = 7)   Portanto, o digito verificador é 7. Dessa forma, o código completo é: 7891000315507.   Se o resultado for um múltiplo de 10, o dígito verificador será 0.
    • Resolução usando algoritmo matemático
  L = Split("789100031550","")   'Converte string em Array de Caracteres  For i = 0 to L.Ubound      RE = RE + L(i).Val * ((i MOD 2) * 2 + 1)  ' soma todos multiplicando apenas os pares por 3  Next
  RE = ((1 - ((re / 10)-(re \ 10))) * 10) MOD 10   'Acha o múltiplo referido a cima  'neste caso RE será 7
    • Função PHP para calcular o Dígito Verificador no parâmetro EAN13
   function IncluiDigito($ean) {       $digitos = str_split($ean);       $soma = 0;       foreach ($digitos as $i => $digito) {           if (($i % 2) === 0) {               $soma += $digito * 1;           } else {               $soma += $digito * 3;           }       }       $resultado = floor($soma / 10) + 1;       $resultado *= 10;       $resultado -= $soma;       if (($resultado % 10) === 0) {           $ean = $ean . '0';       } else {           $ean = $ean . $resultado;       }       return $ean;   }   echo IncluiDigito(789100031550);


    • Função PHP para Verificar o EAN13
  function validateEAN13Barcode($barcode)  {     try {        if ((!preg_match("/^[0-9]{13}$/", $barcode)) || (strlen($barcode) < 13)) {           throw new Exception('O código EAN13 mencionado não possui 13 caracteres numéricos');        }        $digits = str_split($barcode);        $result = 0;        for($i = 0; $i < 12; $i++) {           $result += (($i == 0) || (($i % 2) == 0)) ? $digits[$i] : ($digits[$i] * 3);        }        if ($checkDigit == $digits[12]) {           return ['status' => true, 'message' => 'O código informado é um EAN13 válido'];        } else {           throw new Exception('O digito verificador não confere com o mencionado');        }     } catch(Exception $e) {        return ['status' => false, 'message' => $e->getMessage()];     }  }
  • Função em PLpgSQL(PosgreSQL) que de acordo o valor informado gera o dígito verificador e retorna o código válido com os 13 dígitos:
  • create or replace function fn_get_codbarras_ean13(p_codbarras varchar(12))returns varchar(13) as $$declare    v_soma integer;    v_digitos smallint[12];    v_DV smallint;begin    --Verifica a quantidade de dígitos informados no parâmetro da função    if length(p_codbarras) > 12 then        raise exception 'O valor informado no parâmetro possui mais do que 12 dígitos';    end if;    --Formata o valor do parâmetro com zeros à esquerda e o converte em um array    v_digitos := string_to_array(lpad(p_codbarras,12,'0'), null);    --É somado cada elemento do array, caso ele esteja num índice par o valor será    --multiplicado por 3 antes de ser somado.    for i in 1..12 loop        if mod(i,2) = 0 then            v_soma := coalesce(v_soma, 0) + (v_digitos[i] * 3);        else            v_soma := coalesce(v_soma, 0) + v_digitos[i];        end if;    end loop;    --O resultado da subtração de 10 pela sobra da divisão da soma dos dígitos    --por 10 é o dígito verificador    v_DV = 10 - mod(v_soma, 10);    if v_DV = 10 then        v_DV := 0;    end if;    --É retornado o código de barras concatenado ao dígito verificador    return array_to_string(v_digitos, '') || v_DV;end$$ language plpgsql volatile strict;
    • Função em ORACLE(PL/SQL) para gerar o EAN13
  CREATE OR REPLACE FUNCTION FUN_EAN13(P_CODIGO_BARRA IN VARCHAR2) RETURN VARCHAR2 IS     V_SOMA     NUMBER;     V_MULTIPLO NUMBER;  BEGIN     IF LENGTH(P_CODIGO_BARRA) != 13 THEN  --passar também o digito, no total 13 caracteres       RETURN 'N';     END IF;
     FOR I IN 1..12 LOOP  --soma o que é par e impar       IF MOD(I,2) = 0 THEN         V_MULTIPLO := 3;       ELSE         V_MULTIPLO := 1;       END IF;       V_SOMA := NVL(V_SOMA,0) + SUBSTR(P_CODIGO_BARRA, I, 1) * V_MULTIPLO;     END LOOP;
     IF NVL(NULLIF((10 - MOD(V_SOMA, 10)),10),0) = SUBSTR(P_CODIGO_BARRA, 13) THEN  --verifica o digito       RETURN 'S';     ELSE       RETURN 'N';     END IF;   END;


  ALTER FUNCTION [dbo].[UFN_GeraCodigoEAN](@ID VARCHAR(20))  RETURNS VARCHAR(20) AS  BEGIN     DECLARE @Retorno VARCHAR(20), @Digito CHAR(1)     DECLARE @chk_digit int, @chk int     DECLARE @num TABLE (num int)     SELECT @ID = RTRIM(LTRIM(@ID))     SELECT @ID = '999'+ISNULL(REPLICATE('0', 9 - len(ISNULL(@ID ,0))), ) + @ID     INSERT INTO @num     SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12     SELECT @chk_digit = SUM(CONVERT(int, SUBSTRING(@ID, LEN(@ID) - num + 1, 1)) * CASE WHEN num % 2 = 1 THEN 3 ELSE 1 END) FROM @num WHERE num <= LEN(@ID)     SELECT @chk_digit = (10 - (@chk_digit % 10)) % 10     SELECT @Digito=CHAR(ASCII('0') + @chk_digit)     SELECT @Retorno=@ID + @Digito     RETURN @Retorno  END

Fórmula no Excel

A fórmula abaixo pode ser aplicada sem a necessidade de uso de macro, em qualquer versão do Excel. A fórmula foi validada no site da GS1 com resultado satisfatório. Insira um código com 12 dígitos em uma célula do Excel, formatando-a como texto e aplique a fórmula abaixo para calcular o dígito:

=SE(((ARREDONDAR.PARA.BAIXO((EXT.TEXTO(A2;1;1)+(EXT.TEXTO(A2;2;1)*3)+EXT.TEXTO(A2;3;1)+(EXT.TEXTO(A2;4;1)*3)+EXT.TEXTO(A2;5;1)+(EXT.TEXTO(A2;6;1)*3)+EXT.TEXTO(A2;7;1)+(EXT.TEXTO(A2;8;1)*3)+EXT.TEXTO(A2;9;1)+(EXT.TEXTO(A2;10;1)*3)+EXT.TEXTO(A2;11;1)+(EXT.TEXTO(A2;12;1)*3))/10;0)+1)*10)-(EXT.TEXTO(A2;1;1)+(EXT.TEXTO(A2;2;1)*3)+EXT.TEXTO(A2;3;1)+(EXT.TEXTO(A2;4;1)*3)+EXT.TEXTO(A2;5;1)+(EXT.TEXTO(A2;6;1)*3)+EXT.TEXTO(A2;7;1)+(EXT.TEXTO(A2;8;1)*3)+EXT.TEXTO(A2;9;1)+(EXT.TEXTO(A2;10;1)*3)+EXT.TEXTO(A2;11;1)+(EXT.TEXTO(A2;12;1)*3))=10;0;((ARREDONDAR.PARA.BAIXO((EXT.TEXTO(A2;1;1)+(EXT.TEXTO(A2;2;1)*3)+EXT.TEXTO(A2;3;1)+(EXT.TEXTO(A2;4;1)*3)+EXT.TEXTO(A2;5;1)+(EXT.TEXTO(A2;6;1)*3)+EXT.TEXTO(A2;7;1)+(EXT.TEXTO(A2;8;1)*3)+EXT.TEXTO(A2;9;1)+(EXT.TEXTO(A2;10;1)*3)+EXT.TEXTO(A2;11;1)+(EXT.TEXTO(A2;12;1)*3))/10;0)+1)*10)-(EXT.TEXTO(A2;1;1)+(EXT.TEXTO(A2;2;1)*3)+EXT.TEXTO(A2;3;1)+(EXT.TEXTO(A2;4;1)*3)+EXT.TEXTO(A2;5;1)+(EXT.TEXTO(A2;6;1)*3)+EXT.TEXTO(A2;7;1)+(EXT.TEXTO(A2;8;1)*3)+EXT.TEXTO(A2;9;1)+(EXT.TEXTO(A2;10;1)*3)+EXT.TEXTO(A2;11;1)+(EXT.TEXTO(A2;12;1)*3)))


Obs: A fórmula acima não deve ter quebras de linha e no exemplo, o código foi inserido na célula A2.

Outra maneira

Como sugestão a uma maneira diferente no Excel para resolver o mesmo problema, abaixo outra fórmula utilizando técnica diferente do Excel. Ambas devem retornar o mesmo resultado, mas a fórmula abaixo é mais compacta:

=MOD(9 * SOMARPRODUTO(--EXT.TEXTO(TEXTO(A2; REPT("0"; 12)); LIN(INDIRETO("1:12")); 1);--EXT.TEXTO("131313131313"; LIN(INDIRETO("1:12")); 1)); 10)

Obs: A fórmula acima não deve ter quebras de linha e no exemplo, o código foi inserido na célula A2.

Codificação [carece de fontes?]

Codificação EAN-13
Números no código L
Números no código G
Números no código R

Na codificação do EAN-13, os dígitos são divididos em 3 grupos; o primeiro dígito, o primeiro grupo de 6 dígitos e o último grupo de 6 dígitos. O primeiro grupo de 6 dígitos está codificado através de um sistema onde cada dígito tem duas codificações possíveis, uma par e outra impar. O primeiro dígito está codificado através da selecção de um padrão de escolhas entre estas duas codificações para os seis dígitos seguintes, de acordo com a tabela abaixo (ao contrário dos outros dígitos, o primeiro dígito não está representado directamente por um padrão de barras). Todos os dígitos no último grupo de seis dígitos estão codificados através de uma combinação única de padrões que são os mesmos utilizados no UPC.

Estrutura do EAN-13
1º dígito1º grupo de 6 dígitosÚltimo grupo de 6 dígitos
0LLLLLLRRRRRR
1LLGLGGRRRRRR
2LLGGLGRRRRRR
3LLGGGLRRRRRR
4LGLLGGRRRRRR
5LGGLLGRRRRRR
6LGGGLLRRRRRR
7LGLGLGRRRRRR
8LGLGGLRRRRRR
9LGGLGLRRRRRR
Codificação dos dígitos
DígitoL-codeG-codeR-code
0000110101001111110010
1001100101100111100110
2001001100110111101100
3011110101000011000010
4010001100111011011100
5011000101110011001110
6010111100001011010000
7011101100100011000100
8011011100010011001000
9000101100101111110100

Nota:As entradas na coluna R são complementares às respectivas entradas na coluna L. As entradas na coluna G são o equivalente ao inverso das entradas na coluna R.

Especificações de aplicação

Localização

Deve estar localizado na base natural do produto para existir um padrão no que concerne a leitura do código de barras facilitando o operador que manuseia o leitor. Existem outro tipo de especificações de localização para produtos que não tenham uma base natural óbvia.

Posição

O símbolo pode estar posicionado na vertical ou horizontalmente na embalagem sendo a orientação do código numérico e do código de barras igual. Ou seja, ambos na vertical ou ambos na horizontal. Caso se trate de uma embalagem cilíndrica é preferível que estejam posicionados verticalmente para uma melhor leitura do código.

Zona de Silêncio

Não se deve imprimir nada e deixar umas margens claras tanto à esquerda como à direita do símbolo EAN-13, pois essas pertencem também ao símbolo e são o identificador do início e do término do código.

Tamanhos e Medidas

O importante é saber que a altura das barras não será tão importante quanto a largura, pois o laser do leitor que irá escanear as barras é bem fino. Mudando a largura drasticamente você pode distorcer ou até modificar os códigos, resultando em erro na hora da leitura. Por isso aconselhamos sempre testar a imagem final antes de imprimir seus códigos em grande escala. Segue abaixo os tamanhos aproximados:

PEQUENO (ALTURA X COMPRIMENTO)MÉDIO (ALTURA X COMPRIMENTO)GRANDE (ALTURA X COMPRIMENTO)
1,30 CM X 4,50 CM2,50 CM X 3,80 CM2,55 CM X 6,35 CM

Processo de Impressão

A melhor maneira de imprimir os Códigos de Barras EAN-13 seria direto na embalagem de seu produto. Caso as embalagens já estejam prontas, você poderá imprimir etiquetas adesivas, e colar as etiquetas nas embalagens de seus produtos. O recomendado seria impressão Térmica, para manter a qualidade da leitura de seu Código de Barras EAN-13.

Cores do símbolo

Os leitores têm a capacidade de ler o EAN-13 devido ao contraste entre as barras escuras e as barras claras (ou fundo). Logo existem cores mais legíveis tanto para uso nas barras claras quanto para o uso nas barras escuras. Para as barras escuras é aconselhado o preto, verde-escuro, azul, e marrom escuro. Enquanto que para as barras claras é aconselhado o branco, rosa, e bege, sempre mantendo uma cor mais neutra, e evitando cores tropicais, como por exemplo vermelho, laranja, e amarelo, devido ao laser ser vermelho, isso pode causar uma certa confusão na hora da leitura. Normalmente o mais usual é as barras escuras serem pretas e o fundo branco.

Ver também

Ligações externas