Você está na página 1de 19

A MATEMTICA DOS CDIGOS DE BARRAS

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.

Figura 1. Cdigo de barras

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:

Em 1728, B. Bouchon concebeu a idia de cifrar informaes em folhas de papel perfurado. A


descoberta verdadeiramente importante veio em 1801, quando Joseph-Marie Jacquard (1752-
1834) construiu um tear que era comandado por cartes perfurados e que foi, talvez, a primeira
mquina programvel. O tear de Jacquard era capaz de realizar todos os movimentos necessrios e
ele foi o primeiro a produzir tecidos com padres figurativos. Essa mquina deu mpeto revoluo
tecnolgica da era industrial e foi a base para o desenvolvimento do moderno tear automtico.
Em 1857, Sir Charles Wheatstone utilizou fitas de papel para armazenar dados, seguindo o
mesmo princpio bsico dos cartes perfurados, mas com a vantagem de poder alimentar dados de
forma contnua.
Em 1822, Charles P. Babbage (1792-1871), um professor de matemtica de Cambridge e um
dos fundadores de Analytical Society (grupo de professores que modificaria o ensino da matemtica
na Inglaterra e que tiveram influncia fundamental na criao da lgebra abstrata) inventou um
instrumento de clculo mais sofisticado, que denominou Mquina Diferencial. Nessa essa poca,
ele observou que as operaes matemticas repetitivas poderiam ser desenvolvidas com mais ag-
ilidade e confiabilidade pelas mquinas que pelos homens. Mais adiante, em 1833, projetou uma
Mquina Anatica, isto , uma mquina capaz de executar todas as operaes aritmticas, de fazer
comparaes e analisar seus prprios resultados, que era programada atravs de cartes perfurados.
Ele foi o primeiro a perceber que uma mquina de computar deveria ter um dispositivo de entrada,
uma memria (que ele chamou de mill = moinho) e um dispositivo de sada. Sua mquina, em
particular, seria alimentada por duas sries de cartes perfurados: uma com os dados e outra com
as operaes a serem executadas. Por causa disto, ele considerado o pai do computador digital.
Suas idias despertaram o interesse de Ada August, condessa de Lovelace e filha de Lord Byron,
que foi a primeira programadora da histria. No perodo de 1842-1843 ela taduziu do italiano um
artigo de Luigi Menebrea sobre a mquina da Babbage e, num apndice, detalhou um mtodo
completo para calcular nmeros de Bernoulli com a mquina.
Babbage conseguiu convencer o governo britnico a financiar seu projeto mas, apesar dos esforos
de anos e de vrios investimentos governamentais, a mquina jamais chegou a ser construida. De
acordo ao plano original, ela seria movida a vapor e de tamanho maior do que uma locomotiva.
A prxima personagem importante nesta histria Hermann Hollerith (1860-1951) que obteve
um doutorado em estatstica na Columbia University em 1879 e, logo em seguida, foi empregado
pelo Bureau de Censos dos EUA para trabalhar com seu professor, William P. Trowbridge, no
censo de 1880. Foram necessrios dez anos de trabalho para tabular completamente todos os dados
recolhidos. Durante este perodo, Hollerith deu tambm aulas durante algum tempo no Massachus-
sets Institute of Technology e trabalhou no Escritrio de Patentes de Washington. Sobretudo, ele
empregou seu tempo projetando uma mquina que pudesse tabular dados automaticamente. Para
isso, ele utilizou novamente a idia dos cartes perfurados de Jacquard, escrevendo dados em oito
colunas que utilizavam o sistema de numerao binria. Esses cartes eram ento lidos por sua
mquina que utilizava sensores eltricos. Quando foi realizado um novo censo, em 1890, apesar
dele ser mais sofisticado e coletar mais dados que o anterior, a inveno de Hollerith pode tabular
todos os dados em apenas seis semanas.
Sua criao teve sucesso immediato e ele deixou seu emprego para fundar uma companhia ded-
icada ao desenvolvimento de mquinas semelhantes, a Tabulating Machine Company que, com o
decorrer dos anos, se transformou na atual IBM.
O desenvolvimento de computadores eletrnicos ganhou mais fora a partir da segunda guerra
mundial, quando foi percebido seu potencial estratgico.
A MATEMTICA DOS CDIGOS DE BARRAS 3

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.

Figura 2. O computador ENIAC

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

Figura 3. George J. Laurer

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

Figura 4. Cdigo UPC

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:

dgito do lado esquerdo do lado direito


0 0001101 1110010
1 0011001 1100110
2 0010011 1101100
3 0111101 1000010
4 0100011 1011100
5 0110001 1001110
6 0101111 1010000
7 0111011 1000100
8 0110111 1001000
9 00010011 1110100

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

Figura 5. Os codigos UPC-A e EAN-13

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:

dgito lado esquerdo par lado esquerdo mpar lado direito


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 00010011 0010111 1110100

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:

8 7 0110111 9 7 0010111 5 7 0111001


0 7 0001101 0 7 0001101 0 7 0001101
Para os dgitos do lado direito no temos que nos preocupar com paridade, e obtemos, diretamente da
tabela, a seguinte codificao:

2 7 1101100 6 7 1010000 6 7 1010000


2 7 1101100 4 7 1011100 1 7 1100110
Por tanto, o cdigo de barras correspondente :

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:

 = (a1 , . . . , a12 , x)  (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1) =


= a1 + 3a2 + a3 + 3a4 + a5 + 3a6 + a7 + 3a8 + a9 + 3a10 + a11 + 3a12 + x.
8 C. POLCINO MILIES

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].

Tipo de erro Frequncia relativa %


erro nico . . . a . . . 7 . . . b . . . 79
transposio adjacente . . . ab . . . 7 . . . ba. . . 10.2
transposio alterna . . . abc. . . 7 . . . cba. . . 0.8
erro gmeo . . . aa. . . 7 . . . bb. . . 0.6
erro gmeo alternado . . . aba. . . 7 . . . cbc . . . 0.3
outros 9.1
Tabela 1. Tipos de erros e suas frequncias segundo Verhoeff
10 C. POLCINO MILIES

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

Definio 5.1. Sejam = (w1 , . . . wn ), com wi A, 1 i n um vetor de pesos e


c A um inteiro fixado. Dados dois inteiros positivos m e n e um conjunto de nmeros
a1 , . . . an1 tais que ai A, 1 i n 1, define-se o nmero de verificao an como o
nico elemento de A que verifica a equao:
n
X
ai wi c (mod m).
i=1

Um sistema de codificao assim definido ser denotado por C = (A, m, n, c, ).


Note que freqentemente A = {0, 1, . . . , m 1}. Neste caso, tomando classes mdulo m, temos que an
o nico elemento de A que verifica:
n1
!
X
an = w1 n c ai w i .
i=1

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).

Suponhamos agora que foi cometido um erro do tipo


= . . . ai . . . aj . . . 7 0 = . . . aj . . . ai . . . .
Note que, neste caso podemos calcular a diferena
 0  = (ai wi + aj wj ) (aj wi ai wj ) = (ai aj )(wi wj ).
Assim, este erro no ser detectado se e somente se

(ai aj )(wi wj ) 0 (mod m).


Daqui em diante, o argumento inteiramente anlogo ao anterior. 
A luz deste teorema, resulta claro que a melhor forma de ter certeza que o sistema de codificao ser
capaz de detectar todos os erros nicos e todos os erros de transposio (contigua ou no) tomar, para
o valor do mdulo m, um nmero primo. De fato, existem vrios sistemas em uso que procedem desta
forma.
Exemplo 5.4.
Um sistema universalmente adotado para a clasificao de livros o ISBN (International Standard
Book Number). Ele trabalha mdulo 11, mas para facilitar a notao, utiliza tambm como conjunto
de valores A os dgitos de 0 a 9 e os vetores de identificao tem 10 componentes. Ele pode ser descrito,
na nossa notao, por (A, 11, 10, 0, ) com = (10, 9, 8, 7, 6, 5, 4, 3, 2, 1).
Por exemplo, o livro do autor [14] mencionado acima tem o nmero ISBN 1-4020-0238-6. O dgito final,
de verificao 6 porque

(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:

an = c ((an1 ) an2 (an3 ) ) (mod 10).


No caso em que o nmero de componentes do vetor de identificao par utiliza-se o vetor de pesos
= (, I, , I, . . . , , I)
e resulta uma equao de verificao anloga, com uma frmula similar para o clculo do dgito de verifi-
cao.
Este o sistema utilizado para determinar os nmeros nos cartes de crdito. Por exemplo, um de-
terminado carto tem o nmero 5745 5195 0431 5412. Vamos a aplicar a ele o sistema de verificao
IBM:
5 7 4 5 5 1 9 5 0 4 3 1 5 4 1 2
I I I I I I I I
1 7 8 7 1 1 9 1 0 4 6 1 1 9 2 2
Agora, calculamos:

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

O cdigo IBM generalizado utiliza a mesma permutao, com o vetor de pesos:


= ( n1 , n2 , . . . , , 0 )
onde 0 = I. A equao ento:
n
X
i1 (an+1i ) c (mod 10)
i=1
e
n
X
an = c i1 (an+1i ) (mod 10).
i=2

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.

6. Cdigos sobre grupos


6.1. O grupo dihedral.
Na seo anterior apresentamos diversos mtodos de detectar erros usando um dgito de verificao.
Dentre estes, s o sistema ISBN para livros era capaz de detectar todo erro nico de digitao e todo erro
de transposio. Ele tinha, porm, o inconveniente de precisar da introduo de um dgito extra, para
representar o nmero 10, que denotamos por X.
Em 1969 Verhoeff, na sua tese de doutoramento [16], desenvolveu um mtodo simples, baseado no em
clculos com nmeros inteiros, mas com os elementos de um certo grupo, que tambm detecta erros nicos
de digitao e todos os erros de transposo adjacentes, sem necessidade de smbolos extras. A exposio
elementar deste mtodo que damos a seguir aparece em [6] e num texto bsico de lgebra, do mesmoo
autor [5, Captulo V].
Consideremos o grupo dihedral D5 , que pode ser definido como o grupo das isometrias do plano que
deixam fixo um pentgono regular dado. Este grupo contm dez elementos. Cinco deles so rotaes: a
identidade R0 , a rotao R1 de ngulo 2/5 em sentido antihorrio, e as rotaes R2 , R3 e R4 de ngulos
2(2/5), 3(2/5) e 4(2/5) respectivamente. Contm ainda cinco reflexes, em relao aos seus eixos de
simetria, que passam por cada um dos vrtices e o ponto mdio do lado oposto: S6 , S7 , S8 , S9 e S10 .

s5

s6

s7

s8

Figura 7. Simetrias do pentgono

Vamos usar simplesmente os subndices 0, 1, 2, 3, 4 para designar as rotaes correspondentes e os sub-


ndices 5, 6, 7, 8, 9 para as respectivas reflexes.
A MATEMTICA DOS CDIGOS DE BARRAS 15

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.

Procedendo desta forma, obtemos a seguinte tabela de multiplicao para D5 .

 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

o advento da moeda unificada da Europa, o Euro).

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

Isto significa, por exemplo, que a permutao 5 :


 
0 1 2 3 4 5 6 7 8 9
5 = .
4 2 8 6 5 7 3 9 0 1
O nmero de srie da nota da Figura 6.1 DU7124458G6. Vamos verificar que esta uma numerao
vlida. Para poder usar o mtodo de Verhoeff devemos trabalhar apenas com os dgitos de 0 a 9; por causa
disso, a cada letra das usadas pelo Deutch Bundesbank deve-se lhe assignar um valor numrico. Isto
feito de acordo com a seguinte tabela.

A D G K L N S U Y Z
0 1 2 3 4 5 6 7 8 9

Usando esta tabela, o nmero da nota em questo se transforma em 1771244


5826. Aplicamos ento ordenadamente as permutaes dadas:
1 7 7 1 2 4 4 5 8 2 6
1 2 3 4 5 6 7 8 9 10
          
5 1 5 4 8 8 9 5 9 0 6
A MATEMTICA DOS CDIGOS DE BARRAS 17

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.

Definio 6.1. Uma permutao de um grupo G diz-se uma aplicao anti-simtrica


se verifica a seguinte condio:
x(y) 6= y(x), para todo par de elementos x, y G.
O grupo D5 desempenha um papel importante na elaborao de cdigos detectores de erros porque
pode-se mostrar que ele o nico grupo de ordem 10 que possui uma aplicao anti-simtrica.
Como as transposies adjacentes se encontram entre os erros mais comuns e como cdigos que detectam
estes erros podem-se elaborar a partir de grupos com aplicaes anti-simtricas, houve vrios trabalhos
que dedicam especial ateno a este tipo de grupos.
No caso dos grupos abelianos, h um tipo de permutao que tambm importante.

Definio 6.2. Uma permutao de um grupo G diz-se uma aplicao completa se a


funo x 7 x(x), para todo x G, uma permutao de G.
Pode-se demonstrar que se G um grupo abeliano, ento G possui uma aplicao anti-simtrica se e
somente se G possui uma aplicao completa.
Um grupo abeliano de ordem 2m, com m mpar no possui aplicaes completas [3]. Como consequncia
imediata, temos que Um grupo abeliano de ordem 2m, com m mpar no possui aplicaes anti-simtricas.
Outros resultados relativos a este tipo de aplicaes so os seguintes:
Um grupo cclico admite uma aplicao anti-simtrica se e somente se de ordem mpar [15].
Todo grupo solvel no abeliano admite uma aplicao anti-simtrica [11].
Todo grupo simples, exceto Z2 , admite uma aplicao anti-simtrica [8].
Foi anunciado por Heiss que todo grupo finito no abeliano tambm admite uma aplicao anti-simtrica
[12].
Para os grupos dihedrais, diversas classes de aplicaes anti-simtricas foram achadas em [4] e [9]. Como
vimos, isto implica que estes grupos podem ser usados para construir cdigos que detectam erros nicos
de digitao ou transposies adjacentes. Porm, eles no podem detectar outros erros freqentes, como
mostra o seguinte teorema, devido a Damm [3, Teorema 5]
Teorema 6.3. Seja m > 2 um inteiro mpar. No existe um sistema de dgito de controle sobre Dm que
seja capaz de detectar todas as transposies alternadas, todas os erros gmeos ou todos os erros gmeos
alternados.
18 C. POLCINO MILIES

EXERCCIOS

(1) Determine todos os subgrupos cclicos de D5 .


(2) Ache o centro Z(D5 ) de D5 e determine o quociente D5 /Z(D5 ).
(3) Determine a decomposio em produto de ciclos disjuntos e a paridade da permutao do mtodo
de Verhoeff.
(4) Determine o valor de x para que o nmero 3572498x seja um nmero vlido no mtodo de Verhoeff.
(5) Mostre que tomando a permutao = (1 4)(2 3)(5 8 6 9 7) no mtodo de Verhoeff, tambm
possvel detectar todo erro nico de digitao e toda transposio adjacente.
(6) Determine o valor do dgito x para que o nmero AD377345654Kx seja um nmero vlido para
uma nota emitida pelo Deustche Bank.
(7) Idem, para o nmero N Z357x29477L2.
(8) (Gallian [5]) Seja = (1 2 4 8 7 5)(3 6). A cada nmero da forma a1 a2 . . . an (com n mpar)
atribumos o dgito de controle ((a1 ) + a2 + (a3 ) + a4 + + (an )) (mod 10). Calcule o valor
do dgito de controle para o nmero 3125600196431. Prove qie este mtodo detecta todo erro nico
de digitao. Determine quais transposies adjacentes no podem ser detectadas por este mtodo.
A MATEMTICA DOS CDIGOS DE BARRAS 19

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

IME/USP - Departamento de Matemtica, SP.

Você também pode gostar