2008-06-09

Códigos de Barras e tal....

Sempre gostei de matemática, ou melhor, da aplicação prática da matemática. Uma das áreas que gosto de "visitar" de vez em quando é a questão dos chek-digits, ou dígitos de controlo, encontrados em quase todos os códigos de produto e afins.

Aqui há tempos tive que criar uma base de dados para gerir códigos EAN, os vulgares códigos de barras que os produtos presentes nos supermercados possuem. Existem vários formatos de códigos EAN, nomeadamente o EAN-8, o EAN-13 e os EAN-13+2 e EAN-13+5.

Nos códigos EAN-13 (o que me interessava para a base de dados), existem 4 campos em que podemos subdividir o código: País, Marca, Produto, Dígito de Controlo.

Por exemplo, se tivermos o código 5601045105306, este subdivide-se em:
- Código do País : 560
- Código da Marca: 1045
- Código do Produto: 10530
- Dígito de Controlo: 6

Ora, os códigos dos diversos países são atribuídos por uma organização internacional, denominada GS1, sendo que a Portugal cabe o 560.

Dentro de cada país, existem organizações que distribuem os códigos pelas marcas, e estas organizam os códigos pelos seus produtos como muito bem entenderem....

Resta o dígito de controlo: Como é calculado ?

Começemos por escrever o código, sem o dígito de controlo:

560104510530

Numeramos as posições da direita para a esquerda :

12 11 10 9 8 7 6 5 4 3 2 1
5 6 0 1 0 4 5 1 0 5 3 0

Multiplicamos todos os algarismos nas posições ímpares (1, 3, 5...) por 3:

12 11 10 9 8 7 6 5 4 3 2 1
5 18 0 3 0 12 5 3 0 15 3 0

Somamos todas as parcelas:

5 + 18 + 0 + 3 + 0 +12 + 5 + 3 + 0 +15 + 3 + 0 = 64

E determinamos qual é o algarismo que é necessário adicionar para que o resto da divisão deste último valor por 10 seja 0 (zero):

70 - 64 = 6

Assim, obtemos o dígito de controlo e podemos agora escrever o código completo:

5601045105306

Existem outros métodos de cálculo de dígitos de controlo, normalmente usados, por exemplo o dos códigos ISBN (dos livros), dos códigos NIB, do número do BI, etc...

4 comentários:

Aquarina disse...

Então vai ver como se faz com o BI e descobres uma coisa engraçada.

Hack yourself ;-)

Pedro disse...

A propósito do 560, vê aqui algo sobre o movimento 560. http://560.adamastor.org/

Pedro Ribeiro disse...

Eu já conheço essa "coisa engraçada" há muito tempo :P

Foi até uma das minhas motivações para aprender mais sobre estas técnicas de "check-digit"...

E as notas de Euro, alguém sabe qual é o "defeito" do digito de controlo nos números de série ?

Ruben disse...

Excelente, adorei o artigo. Não me vai servir de nada, mas pelo menos já sei de onde vem o 560. O checksum é básico, mas era preciso saber...
Obrigado por este momento de cultura pessoal.
Um abraço