Segundo a Wikipédia, o código de barras no padrão EAN-13 contém 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
.
O digito verificador é calculado por meio de um algoritmo. A função em Javascript abaixo apresenta a implementação desse algoritmo, recebendo como parâmetro um código de 12 dígitos e concatenando com o digito verificador.
function calcularCodigoDeBarras(codigo) {
const array = codigo.split('')
const soma = array.reduce((total, numero, i) => total += i % 2 === 0 ? numero * 1 : numero * 3, 0)
const ultimoDigito = (Math.floor(soma / 10) + 1) * 10 - soma
const codigo = array.join('') + ultimoDigito
return codigo
}
Geralmente os códigos das embalagens dos produtos (fardos, caixas, cartelas, etc.), seguem um certo padrão quando comparado ao código da unidade. Não sei se é uma regra ou apenas uma convenção, mas é possível perceber que os códigos de barras das embalagens e das unidades contém 14 e 13 dígitos respectivamente, e são praticamente idênticos, mudando apenas a quantidade de algarismos, o primeiro e o último digito. A tabela abaixo apresenta alguns exemplos:
Produto | Código de barras da embalagem | Código de barras da unidade |
---|---|---|
CREME DE AVELA NUTELLA 140G | 07898024395232 | 7898024395232 |
COPO DESC COPOMAIS 200ML PS 100UN BRANCO | 17897147500940 | 7897147500943 |
PAO DE FORMA VISCONTI 400G TRADICIONAL | 27891962051332 | 7891962051338 |
LAVA ROUPA PO OMO 360G BRANCO ABSOLUTO | 37891150092212 | 7891150092211 |
YOKI BATATA PALHA EXTRA FINA 20X100G | 57891095031127 | 7891095031122 |
SUCO ALIANCA UVA 1,5LI VD TTO | 67896100501821 | 7896100501829 |
AMIDO MILHO QUALIMAX PCT | 77891122113370 | 7891122113371 |
BATATA PALITO - AURORA - 2KG | 87891164026376 | 7891164026370 |
Ao analisar os exemplos demonstrados, é possível perceber que que o último dígito do código da unidade é igual a soma da multiplicação do primeiro digito da embalagem por três com o seu último dígito. Podemos pegar como exemplo o código "17897147500940" que se refere a embalagem do "COPO DESC COPOMAIS 200ML PS 100UN BRANCO". 1 * 3 = 3; 3 + 0 = 3; Logo, obtemos o código "7897147500943"
Outro exemplo é o código "27891962051332" referente a embalagem do "PAO DE FORMA VISCONTI 400G TRADICIONAL". 2 * 3 = 6; 6 + 2 = 8; Logo, o código da unidade é 7891962051338
Já quando o valor excede 9, basta calcular o resto da divisão por 10. Exemplo "YOKI BATATA PALHA EXTRA FINA 20X100G", código da embalagem "57891095031127". 5 * 3 = 15; 15 + 7 = 22; 22 / 10 = 2 com resto igual a 2. Logo o código da unidade é "7891095031122"
Ao invés de utilizar o algoritmo completo, quando temos em mãos o código de barras da embalagem podemos simplificar essa tarefa apenas somando um número ao seu último dígito, podemos chamar esse valor de "Somador". A tabela abaixo apresenta os "dígitos somadores":
Primeiro dígito | Somador |
---|---|
0 | 0 |
1 | 3 |
2 | 6 |
3 | 9 (ou -1) |
4 | 12 (ou 2) |
5 | 15 (ou 5) |
6 | 18 (ou -2) |
7 | 21 (ou 1) |
8 | 24 (ou 4) |
9 | 27 (ou 7) |