Escolar Documentos
Profissional Documentos
Cultura Documentos
Polcino BarCode PDF
Polcino BarCode PDF
C. POLCINO MILIES
1. Introduo
Hoje em dia, muitos produtos so identificados com um cdigo numrico. O progresso da tecnologia,
que tornou relativamente baratos e acessveis aparelhos de leitura ptica e computadores, tornou tambm
uso de este tipo de cdigos bastante freqente. Por exemplo, os produtos que compramos num super-
mercado esto identificados por um cdigo de barras, como o que mostramos na Figura 1.1. Ele no
mais do que um nmero, assignado ao produto para sua identificao, escrito de forma a permitir uma
leitura rpida no caixa. Note que imediatamente abaixo das barras, aparece o mesmo nmero escrito em
algaritmos correntes, de forma que o leitor humano tambm possa ler o nmero.
Porm, algumas vezes acontece que, ao passar um produto pela leitora tica (por exemplo, quando a
embalagem est hmida ou enrrugada), esta no consegue realizar a leitura. O que vemos ento que a
pessoa que est no caixa tenta pasar o produto em sentido contrrio, ou inverte o produto, de modo que o
cdigo de barras fique de cabea para baixo, e tenta passa-lo mais uma vez. Se nem asim d certo, ento
ele prprio l o cdigo e o digita rapidamente.
Naturalmente, estas atitudes sugerem algumas perguntas. Em primeiro lugar, uma vez que o desenho
das barras totalemente simtrico para a mquina, que o l usando um feixe de luz transversal, ao pass-lo
de ponta cabea; ela no deveria ler o nmero na ordem contrria? E, o que pior, o operador do caixa,
ao digitar o nmero rapidamente, no poderia cometer um erro e ns acabarmos pagando por um produto
muito mais caro que aquele que estamos comprando?
Na verdade, isso no ocorre. Tanto quando lido numa ordem, como na ordem contrria, o cdigo sempre
interpretado de forma correta. Mais ainda, quando o operador comete algum erro de digitao - e todos
ns j vimos isso acontecer alguma vez - a mquina simplesmente emite um som, para avisar que houve
um erro!
O objetivo destas notas explicar como e porqu isso acontece. Comearemos contando um pouco da
histria destas idias na prxima seo. No captulo seguinte vamos explicar como feita a traduo
dos nmeros em termos de barras e como a leitora distingue entre esquerda e direita; na seo 3 vamos
explicar as idias matemticas que fazem com que eventuais erros possam ser detectados. No captulo final,
mostraremos brevemente como estas idias podem ser extendidas para se obter cdigos mais sofisticados.
2. Um pouco de histria
A idia de utilizar mquinas para realizar clculos , na verdade, bastante antiga. J em 1642, Blaise
Pascal construiu a primeira mquina de calcular de que se tem notcia. Ela funcionava com engrenagens
2 C. POLCINO MILIES
mecnicas e era capaz de realizar apenas somas. Em 1694, Wilhelm Leibniz aprimorou o invento de
Pascal e criou uma mquina capaz de realizar tambm multiplicaes. Do ponto de vista destas notas,
o que realmente interessante a forma de transmitir dados mquina j que, praticamente desde os
comeos da automao, isto foi feito com cartes perfurados que so antepassados diretos dos cdigos de
barra.
De forma muito esquemtica, os estgios do processo que nos interessa so os seguintes:
Muitos autores consideram que o Atanasoff-Berry Computer (ABC), desenvolvido nos EUA no
perodo 1937-42 o primeiro computador eletrnico digital. Porm, ele no tinha capacidade de
programao geral e servia apenas para resolver sistemas lineares, alm de ter outras limitaes
tcnicas.
Em 1941 os alemes desenvolveram o Z3, desenhado por Konrad Zuse. Era eletromecnico, mas
com objetivos mais gerais e totalmente programvel mediante fitas perfuradas.
Em 1944, Tommy Flowers desenhou, na Inglaterra, o computador Colossus, totalmente eletrnico,
concebido para decodificar mensagens interceptadas aos alemes.
O computador mais famoso deste perodo foi o ENIAC (Electronic Numerical Integrator and
Computer), desenhado por John Mauchly e J. Presper Eckert, da Universidade de Pennsylvania e
construdo na Escola Penn Moore de Engenharia Eletrnica daquela universidade. Embora ele fosse
um computador de propsitos gerais, ele foi desenhado originalmente para calcular tabelas de fogo
de artilharia para o Laboratrio de Pesquisas Balsticas, durante a guerra, mas sua construo s
foi completada trs meses aps o fim da guerra. Os primeiros problemas computados pelo ENIAC
foram relacionados construo da bomba de hidrognio. Tanto a entrada quanto a sada de dados
era feita atravs de cartes perfurados.
O aparelho pesava 27 toneladas, usava 17.468 vlvulas e precisou, para sua construo, de mais
de cinco milhes de soldas feitas a mo. Ocupava todo um galpo e consimuia 150 kW de energia
eltrica. Costuma-se dizer que, quando estava em uso, provocava apages na cidade de Pennsylvania
mas isto no deve ser verdade pois possuia alimentao independente da rede eltrica. Quando
estava em operao, elevava a temperatura do local a 50 graus. Ele foi desativado em 2 de outubro
de 1955.
Outro computador de grande porte construdo nesse perodo foi o Mark I. O projeto, concebido
por Howard Aiken da Universidade de Harvard, iniciou-se em 1939 mas foi concludo apenas em
1943, na IBM. Foi tansladado a Harvard onde foi mostado publicamente, pela primeira vez, em
1944 e foi batizado oficialmente como Harvard-IBM Automatic Sequence Controlled Calculator
(ASCC). Media 15.5 m de comprimento, 2.40 m de altura e aproximadamente 60 cm de largura.
A partir de ento, os progressos da tecnologia permitiram diminuir gradativamente o tamanho (e o
custo!) dos computadores at populariz-los definitivamente. Foi tambm a tecnologia que permitiu usar
feixes de luz e scanners para transmitir dados direta e rapidamente aos computadores, criando assim
condies para a utilizao da codificao que nos interessa estudar aqui.
4 C. POLCINO MILIES
Cdigos de barras
A primeira patente de um cdigo de barras foi atribuida em 1952 a Joseph Woodland e Bernard Silver.
Seu cdigo consistia num padro de circunferncias concntricas de espessura varivel. Ao dar entrada ao
pedido de patentes, eles descreviam seu invento como uma classificao de artigos atravs de identificao
de padres.
Em torno de 1970, uma firma de assessoria, a McKinsey & Co., junto com a Uniform Grocery Product
Code Council 1 definiu um formato numrico para identificar produtos e pediu a diversas companhias que
elaborassem um cdigo adequado. Dentre as firmas contactadas, a que acabou apresentando a proposta
vencedora foi a IBM e o cdigo foi criado por George J. Laurer2
O cdigo proposto, formalmente aceito em maio de 1973, passou a ser conhecido como cdigo UPC
(Universal Product Code) e foi adotado nos Estados Unidos e Canad. Ele consistia de uma seqncia de
12 dgitos, traduzidos para barras da forma que analizaremos detalhadametne na prxima seo. Existem
vrias verses sucesivas do UPC, com pequenas modificaes. Posteriormente foi solicitado a Laurer que
ampliasse o cdigo, para permitir uma maior difuso do sistema, de modo a identificar tambm o pas
de orgem de cada produto classificado. Baseado no UPC-A, ele acabou criando um novo cdigo, com 13
dgitos, que foi adotado em dezembro de 1976 com o nome EAN (European Article Numbering system).
Alguns pases adotam este mesmo sistema, dando-lhe outro nome. Por exemplo, no Japo o sistema
conhecido como JAN (Japanese Article Numbering system).
3. Cdigos de barras
3.1. Escrevendo com barras.
Vamos estudar inicialmente o cdigo UPC, que mais simples. Se observamos o cdigo de barras da
figura 3.1, notamos imediatamente que ele formado por listras brancas e pretas alternadas, de espessura
varivel. H, na verdade, quatro espessuras possveis para essas listras, que podem ser classificadas como
finas, mdias, grossas ou muito grossas.
Vamos utilizar o smbolo 0 para indicar uma listra branca fina, o smbolo 00 para uma listra branca
mdia, 000 para uma listra branca grossa e 0000 para uma muito grossa. Da mesma forma, vamos
representar por 1, 11, 111 e 1111, uma listra preta fina, mdia, grossa ou muito grossa, respectivamente.
Assim, as primeiras quatro listras da figura (sem contar, claro as listras que servem de limite e que
aparecem mais compridas na figura), que so uma listra branca grossa, uma preta mdia, uma branca fina
e uma preta fina respectivamente, podem ser representadas pela seqncia 0001101.
Como j dissemos, o cdigo de barras representa uma srie de nmeros. A cada nmero lhe assignado
um espao de espessura fixa, que corresponde sempre a uma seqncia de sete dgitos iguais a 1 ou 0. Por
exemplo, a seqncia 0001101 que achamos acima representa o nmero 0, o primeiro do cdigo da figura.
O seguinte nmero do cdigo, o 7, representado pela seqncia 0111011.
1a
plavra Grocery en ingls, equivale aproximadamente a nossa expresso secos e molhados.
2Estes
dados, bem como a foto do autor, foram obtidos no site do prprio Laurer, que diz ter tido a colaborao de outras
duas pessoas, mas no cita os nomes. O endereo do site :
http://www.bellsouthpwp.net/l/a/laurergj/upc_work.html
A MATEMTICA DOS CDIGOS DE BARRAS 5
Agora que comeamos a compreender a forma de escrever com barras, j podemos responder primeira
das nossas perguntas: como a leitora distingue a direita de esquerda, quando o artigo pode ser passado
em uma ou outra direo?
A resposta muito engenhosa e tambm bastante simples. Os dgitos so codificados de maneia diferente
quando esto do lado direito ou esquerdo do cdigo de barras. Isto feito conforme seguinte tabela:
Note que a codificao de um dado nmero, direita, se obtm da sua codificao esquera, trocando
cada 0 por 1 e reciprocamente. Agora, o mecanismo de reconhecimento fica claro se notamos que cada
seqncia do lado esquerdo tem um nmero mpar de dgitos iguais a 1 e, conseqentemente, cada uma das
que esto direita tem um nmero par. Assim, verificando a paridade de cada seqncia de sete dgitos,
a maquina sabe imediatamente de que lado est lendo o cdigo.
A elaborao do cdigo EAN se deparou com um problema bastante delicado. Era necessrio adicionar
um dgito cada cdigo, de modo a permitir a identificao do pas de orgem do produto, mas se desejava
fazer isto de uma forma tal que a mesma mquina leitora pudesse ler indistintamente cdigos UPC e EAN.
Se observamos a figura abaixo, que representa o mesmo cdigo numrico escrito em ambos sistemas,
veremos que, a primeira vista, parecem diferentes pois, no nmero escrito para o leitor humano, vemos
que h um 0 a mais, escrito no incio da seqncia. Porm, se observamos o cdigo de barras, vemos que
exatamente o mesmo.
O que foi feito o seguinte. Os pases que utilizavam o cdigo UPC antigo, EUA e Canad, so
identificados com um 0, na frente, e o resto da codificao feito utilindo-se o sistema anterior.
Para outros pases, os primeiros dois ou trs dgitos, identificam o pas. Por exemplo, o cdigo de barras
de todos os produtos produzidos no Brasil comea com a seqncia 789, que a que identifica o pas.3
Como era necessrio adicionar um dgito e tambm manter o o mesmo padro de tamanho do cdigo
de barras, para no ter que modificar todas as leitoras, a idia utilizada foi fazer com que o novo dgito
estivesse implcito na forma de escrita de todos os outros. Para isso, no foi modificada a codificao
3Uma tabela completa, com os nmeros identificatrios de cada pas, pode ser encontrada na pgina internet
http://www.barcodeisland.com/ean13.phtml
6 C. POLCINO MILIES
do lado direito (permitindo assim que as leitoras continuassem a identificar o lado corrspondente) mas a
codificao do lado esquerdo varia, dependendo do dgito inicial.
Um dgito do lado esquerdo pode ser agora codificado com um nmero par ou mpar de dgitos iguais a
1, de acordo com a seguinte tabela:
Finalmente, para cada dgito inicial escolhe-se uma alternncia diferente de pares e mpares de acordo
com o seguinte critrio:
Dgito inicial 1o 2o 3o 4o 5o 6o
0 mpar mpar mpar mpar mpar mpar
1 mpar mpar par mpar par par
2 mpar mpar par par mpar par
3 mpar mpar par par par mpar
4 mpar par mpar mpar par par
5 mpar par par mpar mpar par
6 mpar par par par mpar mpar
7 mpar par mpar par mpar par
8 mpar par mpar par par mpar
9 mpar par par mpar par mpar
Vamos ver um exemplo. Uma barra de cerais produzida no Brasil identificada pelo cdigo 7895000266241.
Como corresponde, comea com a seqncia 789, de modo que o primeiro dgito, que estar implcito na
A MATEMTICA DOS CDIGOS DE BARRAS 7
codificao dos demais, sete. Conseqentemene, deve-se usar, do lado esquerdo, a seguinte ordem de
codificao (obtida na tabela acima):
mpar, par, mpar, par, mpar, par.
Consultando ento a tabela de codificao do EAN-13 obtemos:
Figura 6
Um ltimo comentrio respeito deste cdigo. Como j dissemos, os primeiros dois ou trs dgitos do
cdigo de barras (dependendo do caso) servem para identificar o pas de orgem do produto. Os cinco
ou quatro dgitos que restam, at as barras centrais, identificam o fabricante. Os primeiros cinco dgitos
do lado direito identificam o produto especfico, desse fabricante. O ltimo dgito, chamado dgito de
verificao, adicionado no final do processo de elaborao do cdigo, de acordo a um mtodo que
veremos adiante.
Falta ainda responder a nossa segunda pergunta: com faz a mquina para detectar quando um operador
apressado comete um erro de digitao? Isto ser o assunto da nossa prxima seo.
4. A deteco de erros
Para compreender como funciona o processo de deteco de erros precisamos entender, inicialmente,
como se atribui a cada produto, o dgito de verificao.
Suponhamos que um determinado produto est identificado, no sistema EAN-13, por uma dada se-
qncia de dgitos a1 a2 . . . a12 a13 . Como os primeiros dgitos identificam o pas de origem, o fabricante e
o produto especfico, os primeiros doze dgitos da seqncia, esto determinados naturalmente, por um
mtodo padro, a cargo de uma autoridade classificadora em cada pas. Denotaremos o dcimo terceiro
dgito, de verificao, por x.
Para facilitar nossa exposio, vamos escrever esta seqncia como um vetor
= (a1 , a2 , . . . , a11 , a12 , x).
O sistema EAN-13, se utiliza de um vetor fixo, que chamaremos, vetor de pesos que :
w = (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1).
Calcula-se, ento o produto escalar de ambos vetores:
Agora, o dgito de verificao x se escolhe de forma tal que a soma acima seja mltiplo de 10, isto , tal
que
= 0 (mod 10).
Por exemplo, no caso do cdigo da figura 6, os nmeros que indicam o pas de origem, o fabricandte
e o produto so 789500026624. Vamos ver como foi determinado o dgito de verificao. Chamando este
dgito de x e fazendo o produto escalar com o vetor de pesos, temos:
7 + 3 8 + 9 + 3 5 + 0 + 3 0 + 0 + 3 2 + 6 + 3 6 + 2 + 3 4 + x = 99 + x.
Conseqntemente, deve-se tomar x = 1.
Vejamos agora um exemplo de como funciona a deteco de erros. Um livro do autor [14] recebeu
o cdigo de barrras 9781402002380. Suponhamos que, por um erro de digitao no quarto dgito, este
nmero transmitido como = 9782402002380. Ao fazer a verificao de leitura, o computador que
recebeu a informao faz a operao e obtm:
9 + 3 7 + 8 + 3 2 + 4 + 3 0 + 2 + 3 0 + 0 + 3 2 + 3 + 3 8 + 0 = 73.
Como o resultado no um multiplo de 10, ele avisa que foi cometido algum erro.
O cdigo UPC muito semelhante. Como utiliza apenas 12 dgitos (pois usa apenas um para identificar
o pas de orgem do artigo, enquanto o EAN utiliza-se de dois), e o vetor de pesos utilizado pelo UPC
tambm tem um dgito a menos; ele :
= (3, 1, 3, 1, 3, , 1, 3, 1, 3, 1, 3, 1).
O leitor notar que, se o digitador comete apenas UM erro de digitao, trocando um dos dgitos ai
por um outro valor, ento necessriamente o produto no ser congruente a 0 em mdulo 10 e assim
ser possvel detectar que o erro foi cometido. Se mais de um erro for cometido na digitao, o fato
provavelmente ainda ser detectado, mas j no podemos ter certeza, pois eles poderiam se compensar
mutuamente e a soma poderia ainda continuar sendo um multiplo de 10.
O leitor pode-se perguntar qual a funo do vetor de pesos . De fato, se a escolha do dgito de
verificao x fosse feita simplesmente de modo que
a1 + a2 + + a12 + x 0 (mod 10),
ainda assim UM erro de digitao seria detectado. Acontece que h um outro tipo de erro de digitao
muito comum, que consiste em digitar todos os nmeros corretamente, mas trocar a ordem de dois dgitos
consecutivos.
Suponha que, ao digitar o nmero 9 788531 404580 do nosso primeiro exemplo, tenha se cometido esse
tipo de erro, e que o nmero de fato digitado fosse 9 788351 404580. Ao efetuar a verificao ter-se-ia:
(9, 7, 8, 8, 5, 3, 1, 4, 0, 4, 5, 8, 0)(1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1) =
= 9 + 21 + 8 + 24 + 3 + 15 + 1 + 12 + 12 + 5 + 24
= 134 6 0 (mod 10)
Desta forma, o erro seria detectado.
Suponha agora que, ao digitar o nmero 9 781402 002380 do nosso segundo exemplo, tenha se cometido
um erro desse mesmo tipo, e que o nmero de fato digitado fosse 9 781402 002830. Ao efetuar a verificao
ter-se-ia:
(9, 7, 8, 1, 4, 0, 2, 0, 0, 2, 8, 3, 0) (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1) =
= 9 + 21 + 8 + 3 + 4 + 2 + 6 + 3 + 24
= 80 0 (mod 10)
A MATEMTICA DOS CDIGOS DE BARRAS 9
Este exemplo mostra que o sistema de deteco adotado acima no tem a capacidade de detectar todo
erro de transposio cometido. Pode-se demostrar que a transposio de dois dgitos consecutivos ai e ai+1
no detectada, neste sistema de codificao, se e somente se |ai ai+1 | = 5 (veja o exerccio 4).
EXERCCIOS
(1) (i) Um determinado produto deve ser identificado, no cdigo UPC pelo nmero 7 897595 90071. Deter-
mine o dgito de segurana correspondente.
(ii) Faa o mesmo para um produto cujo nmero 7 894900 01152.
(2) Vamos definir um sistema de deteco de erros da seguinte maneira. A cada nmero de 12 dgitos a0 . . . a11
vamos asignar um dgito de verificao a12 de forma tal que 12
P
i=0 ai 0 (mod 10).
(i) Achar o dgito de verificao que deve se adicionar ao nmero
7 234435 01297.
(ii) Provar que toda vez que apenas um nmero alterado na digitao, este sistema capaz de detectar
o erro.
(iii) Mostrar que este sistema no capaz de detectar qualquer erro de transposio.
(3) Ns afirmamos no texto que se apenas um erro de digitao for cometido, alterando um dos dgitos ai
para um outro valor bi , ento o sistema UPC sempre ser capaz de detectar o erro. D uma demonstrao
cuidadosa deste fato.
(4) (i) Mostrar que uma transposio adjacente; isto , um erro do tipo
. . . ai ai+1 . . . 7 . . . ai+1 ai . . .
detectada pelo sistema EAN-13 se e somente se |ai ai+1 | =
6 5. (Sugesto: note que |wi wi+1 | = 2).
(ii) Mostre que um erro de transposio no adjacente do tipo
. . . ai ai+1 ai+2 . . . 7 . . . ai+2 ai+1 ai . . .
no pode ser detectado pelo sistema EAN-13.
(iii) Mostrar que um erro de transposio em que dois dgitos no adjacentes ai e aj so trocados no
pode ser detectado pelo sistema se a diferena i j par.
(iv) Mostrar que, num erro como o descrito no item anterior, se a diferena i j mpar, ento o erro
pode ser detectado pelo sistema EAN-13 se e somente se |ai aj | =
6 5.
5. Cdigos numricos
Como observamos na seo anterior, existem diversos tipos de erros que podem ser cometidos ao digitar
um vetor de identificao. Os erros num nico dgito e as transposies so, de longe, os mais frequentes.
Autores como D.F. Beckley [1] e J. Verhoeff [16] investigaram sistematicamente os erros cometidos por
operadores humanos. No quadro abaixo damos as frequencias relativas obtidas por Verhoeff, que citamos
abreviando quadro publicado por H.H. Schulz [15] e tambm por G.B. Belyavskaya, V.I. Izbash e V.A.
Shcherbacov [2].
Para descrever vrios dos mtodos existentes, vamos introduzir um pouco de linguagem geral. Deno-
taremos por A o conjunto de valores que podem assumir os dgitos utilizados na codificao. Por exemplo,
no caso do cdigo UPC da seo anterior, esse conjunto
A = {x Z | 0 x m 1}.
O vetor com os dados 0 = (a1 , . . . an1 ) ser chamado de vetor de informao e o vetor, j acrecido do
dgito de verificao ser chamado de nmero ou vetor de indentificao
Exemplo 5.2.
Um sistema usado em alguns bancos (mas no todos) o seguinte: o nmero de conta de um cliente
composto de 9 dgitos, sendo que o ltimo o dgito de verificao. Na nossa notao, o sistema pode
ser descrito como C = (A, 10, 2, 0, ) onde A o conjunto dos dgitos de 0 a 9 e = (7, 3, 9, 7, 3, 9, 7, 3, 9).
Por exemplo, o nmero de uma conta num certo banco 95-005541-9. Podemos verificar que
(9, 5, 0, 0, 5, 5, 4, 1, 9) (7, 3, 9, 7, 3, 9, 7, 3, 9) =
= 63 + 15 + 15 + 45 + 28 + 3 + 81
= 250 10 (mod 10).
Nosso prximo Teorema descreve a capacidade que tem um sistema definido desta forma, para detectar
os diversos tipos de erros mais freqentes.
Teorema 5.3. (Capacidade de deteco) Sejam m um inteiro positivo e = (w1 , . . . wn ) um vetor de
pesos. Suponhamos que um vetor de identificao = (a1 . . . , an ) (onde assumimos que 0 ai < n, para
todo ndice i, 1 i n) satisfaz a condio
= a1 w1 + + an wn c (mod m).
Ento:
(1) Todo erro consistente numa nica alterao na posio i-sima ser detectadose e somente se
mdc(wi , m) = 1.
(2) Todo erro de transposio da forma
. . . ai . . . aj . . . 7 . . . aj . . . ai . . .
ser detectado se e somente se mdc(wi wj , m) = 1.
Demonstrao. Suponhamos inicialmente que o dgito ai , na posio i, foi trocado por um outro valor
bi e vamos denotar por o vetor resultante deste erro. claro que o erro no ser detectado se e somente
se
0 (mod m).
A MATEMTICA DOS CDIGOS DE BARRAS 11
Mas = (ai bi )wi , de modo que o erro no ser detectado se e somente se m | (ai bi )wi
0 (mod m) ou, se denotamos por x a classe de um inteiro x em Zm , se e somente se (ai bi )wi = 0 em Zm .
Se mdc(wi , m) = 1 tem-se que wi inversvel em Zm , donde a condio acima implica que ai = bi , logo
ai bi (mod m) e, como ambos os nmeros so menores que m, isto s aconteceria se ai = bi . Logo, o
erro ser detectado.
Por outro lado, se mdc(wi , m) = d 6= 1, dado ai tem-se que dentre os nmeros bi = ai + m/d e
bi = ai m/d, um deles verifica a condio 0 bi < m e o erro que substitui ai por esse nmero no pode
ser detectado. Isto completa a demonstrao de (i).
(1, 4, 0, 2, 0, 0, 2, 3, 8, 6) (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) =
= 54 + 48 + 63 + 6 + 45 + 16 + 27 + 12 + 4
= 275 0 (mod 11)
Este mtodo, porm, tem um pequeno inconveniente, que se comprender melhor analizando mais um
exemplo. Um conhecido livro de lgebra [13] tem como vetor de informao do vetor de seu cdigo ISBN
0-387-96035. Vamos tentar determinar o dgito de verificao. Ele ser um nmero a A tal que
(0, 3, 8, 7, 9, 6, 0, 3, 5, a) (10, 9, 8, 7, 6, 5, 4, 3, 2, 1) 0 (mod 11).
Efetuando as operaes necessrias, obtemos que
243 + a 0 (mod 11).
ou
a 243 (mod 11).
Como 243 1 (mod 11) e 1 10 (mod 11) temos que a = 10. Porm, no conjunto dos dgitos de
0 a 9, no temos nenhum que represente o nmero 10. Devemos introduzir ento mais um smbolo para
representar este nmero. A conveno usual utilizar o smbolo X e assim, cdigo ISBN que aparece
neste livro ISBN 0-387-96035-X.
12 C. POLCINO MILIES
Finalmente observamos que, se tomamos o nmero m de modo que seja primo e o conjunto A formado
por inteiros menores do que m - como em todos os exemplos acima - como cada componente wi do vetor
de pesos prima com m, resulta que multiplicar por wi , em mdulo m, equivale a definir uma permutao
do conjunto A (isto , uma bijeo de A em si mesmo). Isto sugere um mtodo mais geral de definir o
vetor de pesos.
Dado um vetor de informao 0 = (a1 , . . . , an1 ) podemos escolher n permutaes 1 , . . . n do conjunto
A, definir um vetor de pesos por = (1 , . . . , n ), fixar um nmero c A e escolher o dgito de verificao
an de modo que verifique a equao:
() = 1 (a1 ) + n (an ) c (mod m).
Neste caso, o dgito de verificao fica definido por:
n1
!
X
an = n1 c i (ai ) .
i=1
Este tipo de codificao tambm usado na prtica, como mostra o seguinte.
Exemplo 5.5.
Um cdigo usado pela IBM utiliza como conjunto A os dgitos de 0 a 9; o valores m = 10, um valor
qualquer c A e a permutao
0 1 2 3 4 5 6 7 8 9
= .
0 2 4 6 8 1 3 5 7 9
No caso de um vetor de identificao com um nmero mpar de componentes n, se utiliza o vetor de
pesos
= (I, , I, , . . . , , I).
Assim, a equao de verificao resulta:
an + (an1 ) + an2 + (an3 ) c (mod 10)
e o dgito de verificao dado pela frmula:
1 + 7 + 8 + 7 + 1 + 1 + 9 + 1 + 0 + 4 + 6 + 1 + 1 + 9 + 2 + 2 = 60 0 (mod 10)
Note que esta codificao permite detectar todo erro nico de digitao e toda transposio adjacente
exceto no caso em que ai e aj assumem os valores 0 e 9 ou 9 e 0 respectivamente (veja o Exerccio 3).
Observe, porm, que este sistema no detecta transposies do tipo
. . . ai . . . aj . . . 7 . . . aj . . . ai . . .
quando a diferena i j par e tambm no permite detectar erros gmeos.
A MATEMTICA DOS CDIGOS DE BARRAS 13
Este sistema detecta todo erro nico de digitao, toda transposio, adjacente ou no, (exceto no caso
j apontado, quando os dgitos envolvidos so 0 e 9) e todo erro gmeo.
Vimos acima que o cdigo ISBN detecta todo erro nico de digitao e todo erro de transposio.
natural se perguntar, ento, se existe um cdigo com essa capacidade de deteco, trabalhando na base
10. Infelizmente, a resposta negativa, como mostra o seguinte teorema.
Teorema 5.6. (Gumm [10]) Se um sistema numrico de deteco de erros, com um mdulo par, detecta
todo erro nico de digitao, ento, para todo par de ndices i, j existe um erro de transposio entre as
posies i e j que no detectada pelo sistema.
Demonstrao. Como vamos trabalhar com os nmeros de 0 a 2m 1 e tomar congruncias em
mdulo 2m, vamos considerar nossos dgitos como elementos de Z2m , para simplificar nossos argumen-
tos. Suponhamos que o sistema transforma o vetor (a1 , . . . , an ) num outro vetor, que denotaremos
(1 (a1 ), . . . , (n(an )). Claramente, se o sistema capaz de detectar todo erro nico de digitao, en-
to a aplicao na posio i-sima x 7 i (x) deve ser uma permutao de Z2m .
Para que o sistema detecte todo erro de transposio entre as posies i e j necessrio que i (a)+j (b) 6=
j (a) + i (b), todo par de elementos diferentes a, b Z2m . Isto equivalente a dizer que a aplicao
= i j uma permutao Z2m .
Mas m [0, 2m 1] e temos que
(2m 1) 2m
0 + 1 + 2 + + 2m 1 = = 2m m m m (mod 2m).
2
Logo:
X X
m = x= (x)
xZ2m xZ2m
X X X
= b (i (x) j (x)) = i (x) j (x)
xZ2m xZ2m xZ2m
= m m = 0,
uma contradio.
EXERCCIOS
(1) Calcular o dgito de verificao para um livro cujo nmero ISBN tem, como vetor de informao o nmero
85-314-0458
(2) Use o sistema do exemplo 5.2 para determinar o dgito de verificao do nmero 13-010765.
14 C. POLCINO MILIES
(3) Demonstre que o cdigo IBM e o cdigo IBM generalizado tem a capacidade de deteco de erros men-
cionada no texto. (Sugesto: Para discutir erros de transposio adjacente, note que (x) = 2x, se x [0, 4]
e que d(x) = 2x 9 se x [5, 9]. Considere separadamente trs casos:(i) a, b [0, 4], (ii) a, b [5, 9] e
(iii) a [0, 4], b [5, 9] ou vice-versa. Mostre que nos casos (i) e (ii) o erro sempre detectado e que, no
caso (iii) o erro s no detectado se a = 0 e b = 9 ou a = 9 e b = 0.
(4) Mostre que no cdigo UPC podem ocorrer 90 erros de transposio adjacente e que o cdigo e capaz de
detectar todos eles, exceto quando os pares de nmeros adjacentes so 05, 16, 27, 38, 49 ou aqueles que se
obtm invertindo estes.
s5
s6
s7
s8
Assim, por exemplo, a composio das rotaes R3 e R4 seria a rotao de ngulo 3(2/5) + 4(2/5) =
7(2/5) = 2(2/5); isto , a rotao R2 . Em vez de escrever ento que R3 R4 = R2 escreveremos
simplesmente que 3 4 = 2.
Da mesma forma, como a composio S6 S5 = R1 (lembre que, como se trata de composio de funes,
aplicamos primeiro S1 e depois S2 ) escrevemos 6 5 = 1. Por outro lado, fcil verificar que S5 S6 = R0
donde escrevemos 6 5 = 0.
0 1 2 3 4 5 6 7 8 9
0 0 1 2 3 4 5 6 7 8 9
1 1 2 3 4 0 6 7 8 9 5
2 2 3 4 0 1 7 8 9 5 6
3 3 4 0 1 2 8 9 5 6 7
4 4 0 1 2 3 9 5 6 7 8
5 5 9 8 7 6 0 4 3 2 1
6 6 5 9 8 7 1 0 4 3 2
7 7 6 5 9 8 2 1 0 4 3
8 8 7 6 5 9 3 2 1 0 4
9 9 8 7 6 5 4 3 2 1 0
Tabela 2. A tabela de multiplicao do grupo D5
Consideremos a permutao:
0 1 2 3 4 5 6 7 8 9
= .
1 5 7 6 2 8 3 0 9 4
A idia de Verhoeff consiste em transformar um vetor de informao
(a1 , . . . , an1 ) num vetor de codificao, adicionando um dgito de verificao an de forma tal que
(a1 ) 2 (a2 ) n1 (an1 ) an = 0 em D5 .
Note que uma permutao de D5 . Ela foi escolhida para desenvolver este sistema porque pode-se
verificar diretamente que
(1) a (b) 6= b (a) para todo a, b D5 .
Logo abaixo veremos a importncia deste fato.
Como i tambm uma permutao de D5 , para todo inteiro positivo i, resulta claro que este sistema
de codificao detecta todo erro nico de digitao.
Note que um erro de transposio adjacente . . . ai ai+1 . . . 7 . . . ai+1 ai . . . ser detectado se somente se
i (ai ) i+1 (ai+1 ) 6= i (ai+1 si+1 (ai ). Mas, vimos na equao 1 que a (b) 6= b (a) para todo a, b D5 o
que implica, aplicando a permutao i a ambos os membros desta equao, que
i (a) i+1 (b) 6= i (b) i+1 (a) para todo a, b D5
como queriamos demostar.
Uma variante do mtodo de Verhoeff4 foi usada pelo orgo emissor de dinheiro da Alemanha, o Deutsche
Bundesbank. As notas de dinheiro so numeradas num cdigo alfanumrico; isto , se utilizam tanto letras
quanto nmeros. Na Figura 6.1 reproduzimos uma nota de 10 marcos (que j est fora de circulao desde
4Citado por Gallian [7].
16 C. POLCINO MILIES
Figura 8. Gauss
O cdigo utilizado pelo banco segue uma variante do mtodo anterior. Eles numeram as notas usando
os dgitos de 0 a 9 e tambm dez letras: A, D, G, K, L, N, U, V e Z. Tambm se utiliza da tabela da
operao do grupo D5 , mas ao invs de usar uma permutao e suas potncias, utiliza dez permutaes
diferentes. Para determin-las damos, na tabela abaixo, em cada fila i os valores da funo i . Em outras
palavras, na posio i, j est o valor de i (j).
0 1 2 3 4 5 6 7 8 9
1 1 5 7 6 2 8 3 0 9 4
2 5 8 0 3 7 9 6 1 4 2
3 8 9 1 6 0 4 3 5 2 7
4 9 4 5 3 1 2 6 8 7 0
5 4 2 8 6 5 7 3 9 0 1
6 2 7 9 3 8 0 6 4 1 5
7 7 0 4 6 9 1 3 2 5 8
8 0 1 2 3 4 5 6 7 8 9
9 1 5 7 6 2 8 3 0 9 4
10 5 8 0 3 7 9 6 1 4 2
A D G K L N S U Y Z
0 1 2 3 4 5 6 7 8 9
Agora precismos multiplicar estes nmeros, com ajuda da tabela 6.1. Temos:
5 1 = 9, 9 5 = 4, 4 4 = 3,
3 8 = 6, 6 8 = 3, 3 9 = 7,
7 5 = 2, 2 9 = 6, 6 0 = 6,
e finalmente
6 6 = 0.
Este mtodo, porm, tem um inconveniente. Nos clculos, ele no distingue entre uma letra e o nmero
que lhe assignado. Assim por exemplo, se a letra K for trocada pelo nmero 3, o sistema ser incapaz
de detectar o erro. O mesmo acontece se ocorre uma transposio de 3 e K, ou viceversa. Para evitar
este problema, poder-se-ia usar o grupo D18 , que tem 36 elementos (e portanto os vinte smbolos usado
no cdigo alfanumrico das notas corresponderiam a elementos diferentes em D5 ), com uma permutao
adequada. Sugestes nesse sentido apareceram, por exemplo, em trabalhos de Winters, em 1990 [17] e de
Gallian e Mullin, em 1995 [8]
Note que a equao 1 foi essencial para podermos mostrar que o mtodo de Verhoeff permite detectar
erros de transposio adjacentes. Isto justifica a seguinte definio.
EXERCCIOS
Referncias
[1] D.F. Beckley, An optimum system with modulo 11, The Computer Bulletim, 11 (1967), 213-215.
[2] G.B. Belyavskaya, V.I. Izbash and G.L. Mullen, Check character systems over quasegroups and loops, Quasigroups and
related systems, 10 (2003), 1-28.
[3] M. Damm, Check digit over groups and anti-symmetric mappings, Archiv der Math., 75 (2000), 413-421.
[4] A. Ecker and G. Poch, Check character systems, Computing, 37 (1986), 277-301.
[5] J.A. Gallian, Contemporary Abstract Algebra, D.C. Heath and Co., Lexington, 1990.
[6] J.A. Gallian, The Mathematics of Identification Numbers, The College Math. J., 22, 3 (1991), 194-202.
[7] J.A. Gallian, Error detecting methods, ACM Computing Surveys, 28, 3 (1996), 504-517.
[8] J.A. Gallian and M. Mullin, Groups with antisymmetric mappings, Archiv der Math., 65 (1995), 273-280.
[9] H.P. Gumm, A new class of check-digit methods for arbitrary number systems, IEEE Trans, Inf. Th., 31 (1985), 102-105.
[10] H.P. Gumm, Encoding of numbers to detect typing errors, Inter. J. Applied Eng. Ed., 2 (1986), 61-65.
[11] S. Heiss, Anti-symmetric mappings for finite solvable groups, Archiv der Math., 69 (1997), 445-454.
[12] S. Heiss, Anti-symmetric mappings for finite groups, preprint, 1999.
[13] R. Lidl and G. Pilz, Applied Abstract Algebra, Undergraduate Texts in Math., Springer Verlag, New York, 1984.
[14] C. Polcino Milies and S.K. Sehgal, An introduction to Group Rings, Kluwer Acad. Publ., Dordrecht, 2002.
[15] R.H. Schulz, On check digit systems using anti-symmetric mappings, in Numbers, Information and Complexity, Kluwer
Acad. Publ., Dordrecht, 2000, 295-310.
[16] J. Verhoeff, Error detecting decimal codes, Math. Centre Tracts, Mathematische Centrum, Amsterdam, 1969.
[17] S. Winters, Error detecting codes using dihedral groups, UMAP J., 11 (1990), 299-308.
H tambm muitas pginas na internet com informaes sobe o assunto. Veja, por exemplo:
http://en.wikipedia.org./wiki/ENIAC
http://en.wikipedia.org/wiki/Harvard_Mark-I
http://en.wikipedia.org/wiki/Ada_Lovelace
http://www-etsi2.ugr.es/alumnos/mili/Harvard20I.htm
http://www.bellsouthpwp.net/l/a/laurergj/upc_work.html
http://www.barcodeisland.com/ean13.phtml
http://www.adams1.com/pub/russadam/barcode1.html