EAN-13
Este artigo não cita fontes confiáveis. (Setembro de 2019) |
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 (Codificação EAN-13, 2007).
Significado do código numérico do EAN-13
editarAs 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
editarDiferente 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 (Unidades de Consumo, 2007) 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 peso variável, 2007), produtos de quantidade variável (Produtos de quantidade variável, 2007), para uso in-store (In-Store, 2007), para livros e publicações periódicas (Livros e publicações periódicas, 2007), para coupons e meios de pagamento (Coupons e Meios de pagamento, 2007), entre outras aplicações.
Empresa fabricante e produto por ela produzido
editarSeguindo 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 (FAQ - O Uso e as Aplicações da Numeração EAN/UCC-13, 2004, p.4). 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 (Codificação EAN-13, 2007). 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
editarÉ 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
editarTomando 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;
- Função Microsoft SQL Server para gerar o EAN13
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
editarA 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
editarComo 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]
editarNa 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.
1º dígito | 1º grupo de 6 dígitos | Último grupo de 6 dígitos |
---|---|---|
0 | LLLLLL | RRRRRR |
1 | LLGLGG | RRRRRR |
2 | LLGGLG | RRRRRR |
3 | LLGGGL | RRRRRR |
4 | LGLLGG | RRRRRR |
5 | LGGLLG | RRRRRR |
6 | LGGGLL | RRRRRR |
7 | LGLGLG | RRRRRR |
8 | LGLGGL | RRRRRR |
9 | LGGLGL | RRRRRR |
Dígito | L-code | G-code | R-code |
---|---|---|---|
0 | 0001101 | 0100111 | 1110010 |
1 | 0011001 | 0110011 | 1100110 |
2 | 0010011 | 0011011 | 1101100 |
3 | 0111101 | 0100001 | 1000010 |
4 | 0100011 | 0011101 | 1011100 |
5 | 0110001 | 0111001 | 1001110 |
6 | 0101111 | 0000101 | 1010000 |
7 | 0111011 | 0010001 | 1000100 |
8 | 0110111 | 0001001 | 1001000 |
9 | 0001011 | 0010111 | 1110100 |
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
editarLocalização
editarDeve estar localizado na base natural do produto (FAQ - As regras de aplicação do código EAN-13, 2004, p.4) 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
editarO 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
editarNã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
editarO 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 CM | 2,50 CM X 3,80 CM | 2,55 CM X 6,35 CM |
Processo de Impressão
editarA 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
editarOs 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.