Jorge Buescu
Com grande probabilidade o leitor terá já assistido, no meio de um jantar com amigos, à seguinte discussão. A certa altura alguém se pronuncia sobre o algarismo suplementar que os Bilhetes de Identidade passaram a ter de há uns anos para cá mais ou menos nos seguintes termos: "O algarismo suplementar que se segue ao número do BI indica o número de pessoas em Portugal que têm um nome exactamente igual ao do portador do BI". Quando confrontado com o absurdo de tal afirmação (por exemplo, o algarismo suplementar do meu BI é 9 e eu posso comprovar que sou a única pessoa no Mundo, não apenas em Portugal, com o nome de Jorge Buescu; e que pensar dos casos em que o algarismo é 0?), talvez o interlocutor diga algo do género "Mas eu fui informado por fonte seguríssima de que é assim". Ou talvez prefira mudar de assunto. Uma coisa é certa: não vai mudar de opinião, e na próxima vez em que se falar do assunto lá estará a repetir a mesma afirmação, que depois será eventualmente repetida por novos crentes acríticos e assim sucessivamente. Assistimos assim à geração e propagação oral de uma lenda urbana genuinamente portuguesa, com certeza. Afinal de contas, o que representa o misterioso algarismo suplementar que se segue ao número do nosso BI? Em primeiro lugar, ele não representa o número de pessoas com o mesmo nome, ou o número de multas de estacionamento que o portador apanhou, ou qualquer outra pueril e disparatada hipótese deste tipo. O algarismo suplementar é (ou seria, se as autoridades portuguesas não tivessem cometido um patético erro matemático!) apenas um algarismo de controle que detecta se o número do BI está correctamente escrito ou não. Esta história começa nos anos 50, com o nascimento simultâneo, por um lado, da Teoria de Códigos, baseada na Teoria da Informação de Shannon (1948), e por outro da cada vez maior necessidade de tratamento e transmissão em massa de dados de identificação numéricos. Suponha o leitor que é, por exemplo, caixa num supermercado na era pré-leitores ópticos, ou que trabalha numa agência de viagens onde tem de emitir centenas de bilhetes de avião por dia, ou que trabalha numa livraria onde tem de expedir por correio centenas de livros encomendados por dia. Em qualquer destes casos será obrigado a digitar, para cada item em questão (pacote de manteiga, bilhete de avião ou livro) um longo número, talvez com 10 algarismos, que identifica o produto em questão. E tem de o fazer depressa, para que os outros clientes na bicha não se impacientem. Os seres humanos lidam claramente mal com problemas deste tipo. Escrever diariamente centenas de números com 10 algarismos, sem qualquer padrão aparente, leva inevitavelmente (uma interrupção, uma piada do colega do lado…) a que o operador mais tarde ou mais cedo se engane a escrever um dos números. E as consequências podem ser bastantes desagradáveis: cobrar 20 contos por um pacote de manteiga, emitir um bilhete de avião para a Sibéria em vez de para o Rio, expedir o livro errado. Os custos para corrigir estes erros a posteriori podem, evidentemente, ser muito elevados. Coloca-se então o seguinte problema: quando se lida sistematicamente com grandes quantidades de números compridos, em que mais tarde ou mais cedo se verificarão erros, há que identificar quais são os erros mais frequentes e encontrar uma forma automática de detectar, assim que o número é escrito, se ele integra erros ou não. A resposta à primeira pergunta é do domínio da Estatística; sabe-se hoje que mais de 90% dos erros ocorridos na transmissão de dados numéricos são de dois tipos: erros singulares (alteração de um único algarismo, o que levaria por exemplo 2357 a ser escrito como 2358) ou transposições (troca de pares de algarismos adjacentes, como na passagem de 2357 a 2375). O segundo passo é conceber um algoritmo que detecte, com eficiência 100%, a presença ou ausência destes erros. Se o conseguirmos teremos um mecanismo de detecção de erros com eficiência superior a 90%. E é aqui que entra a Teoria de Códigos. Existem muitos algoritmos de detecção de erros, com aplicação tecnológica num número infindável de indústrias, assente na ideia básica de aritmética modular, proveniente da Teoria de Números. A ideia é a seguinte: ao número básico em questão acrescenta-se um algarismo suplementar, o algarismo (ou dígito) de controle. Realizando uma operação adequada (e vamos já descrever o que se deve entender por isto) sobre o número original, devemos obter o algarismo de controle. Se isso não acontecer, é porque ocorreu algum erro na escrita do número original. A ideia de implementar sistemas de identificação com dígitos detectores de erros encontra aplicações quase infindáveis na indústria. É utilizada hoje nos cartões de crédito, nos cheques, na Via Verde, na correspondência postal, nos códigos de barras (UPC-EAN), nos livros (ISBN), nas publicações periódicas (ISSN), etc. Estes sistemas funcionam com variações de pormenor; para dar do seu funcionamento vamos tomar um exemplo: o ISBN (International Standard Book Number), utilizado na identificação de livros. O ISBN é um número, que em geral aparece nas costas do livro, constituído por 10 algarismos que identificam o livro. Por exemplo, o livro de Hill A first course in coding theory tem o ISBN 0-19-853803-0; o livro de Kato et al. Number Theory I tem o ISBN 0-8218-0863-X (os traços são meramente convencionais). A maneira como o código ISBN funciona é simples: se o número ISBN for x1x2x3x4x5x6x7x8x9x10, onde cada xi representa um algarismo, os 9 primeiros algarismos identificam o livro; o 10º algarismo, o dígito de controle, é escolhido por forma a que a soma x1+2x2+3x3+ … +10x10 seja divisível por 11 (tecnicamente, seja congruente com 0 (mod 11)). O leitor pode convencer-se facilmente de que, se alterar qualquer um dos algarismos (erro singular) ou se trocar dois quaisquer deles (transposição), o resultado já não será divisível por 11. Ou seja, o dígito de controle do ISBN detecta, com eficiência 100%, estes erros! Apenas duas questões técnicas. Primeiro, porquê exigir que a soma acima seja divisível por 11 e não, por exemplo, por 10? A resposta está na Teoria de Números: estes algoritmos modulares só funcionam se o módulo for um número primo. Ora o nosso sistema de numeração tem base 10; o primo mais próximo de 10 é precisamente 11, o primeiro para o qual o sistema pode funcionar. Esta é também a resposta à segunda questão: o que significa o dígito de controle X? Como o dígito de controle é o complemento para 11 da soma ponderada dos 9 primeiros algarismos, ele pode tomar o valor 10. Para cobrir esta possibilidade introduz-se o caracter X, que tem a valor 10. Regressemos então ao mistério do BI. Sendo o algarismo suplementar um dígito de controle para detecção de erros, torna-se necessário saber qual o algoritmo utilizado pelo Ministério da Justiça para efectuar esta detecção. E aqui entra o herói desta história, o Prof. Jorge Picado, da Universidade de Coimbra. A sua curiosidade por esta questão levou-o a pedir os números de BI de algumas dezenas de colegas seus. Introduziu-os num pequeno programa em Pascal que fazia a busca dos vários algortimos num sábado de manhã e foi para casa. Ao chegar ao seu gabinete, na segunda-feira de manhã, qual não foi o seu espanto ao verificar que… não existia nenhum algoritmo que funcionasse! Intrigado com este surpreendente resultado, o Prof. Picado teve então uma ideia luminosa. Constatando que o dígito de controle do seu BI era 0, retirou o seu número de BI da lista e pôs o programa a correr. Bingo: em 5 minutos, tinha a resposta. O algoritmo de detecção de erros do Ministério da Justiça é igual ao do ISBN, com ligeiras adaptações: o dígito de controle tem peso 1, o dígito mais à direita do número de BI tem peso 2, o seguinte peso 3, etc. Faça o leitor a experiência com o seu próprio número de BI. Se fizer esta soma o resultado terá de ser múltiplo de 11. Nesta altura, cerca de 1/11 dos leitores da Ingenium, e cerca de 50% daqueles cujo dígito de controle é 0, estarão a pensar que estou a enganá-los. É que, afinal, fizeram as contas e obtiveram um número que não é divisível por 11. Pelo contrário: é um múltiplo de 11 mais 1! E, afinal, porque é que o Prof. Picado teve de retirar o seu número de BI da lista para descobrir o algoritmo de detecção? A resposta a estas perguntas é apenas uma, e completamente patética. Como se disse acima, no ISBN (e no BI) o dígito de controle tem de estar entre 0 e 10, para que se possa assegurar resto 0 ao dividir por 11. É essa a razão de ser do caracter alfanumérico X, que vale 10, no dígito de controle do ISBN. Ora, muito provavelmente alguma mente burocrática da Direcção-Geral dos Registos e Notariado deve ter achado muito desagradável que alguém visse um "X" escrito à frente do seu número de BI, enquanto que outras pessoas tinham apenas um algarismo. Talvez pudesse ser considerado politicamente incorrecto… e a pessoa pudesse pensar que isso teria um significado estranho… talvez cadastro? Ficha no SIS? Para abreviar: alguém no Ministério da Justiça, na sua reconfortante ignorância matemática sobre códigos, teve a brilhante ideia de substituir o dígito de controle X, quando ocorresse, por 0. Ou seja, quando 0 ocorre como dígito de controle, pode ter na realidade dois valores: 0 ou 10! Ou seja, em metade dos casos em que ocorre o 0 (como no caso do Prof. Picado), esse dígito está errado. Ou seja, o próprio Arquivo de Identificação emite um BI cujo número, se controlado pelo seu algoritmo, estaria errado. A ignorância pode custar muito caro. Neste caso, custou a inoperância do sistema de detecção de erros que se pretendia implementar! E repare-se que teria sido muito fácil não cometer esta barbaridade: bastava, por exemplo, adoptar como dígito de controle sempre uma letra, digamos as 11 primeiras letras do alfabeto, A a L… E haveria outras soluções matematicamente correctas, mas mais profundas. O Prof. Picado mostra como, a partir da Teoria de Grupos elementar, usando o grupo diedral D5, se podem construir sistemas de detecção de erros (diferentes dos sistemas modulares, e mesmo melhores do que eles) que permitem usar apenas os algarismos 0 a 9, e com eficiência 100%. Em Novembro passado, o Prof. Picado escreveu para o Ministério da Justiça (responsável pela emissão dos BI) expondo a situação e a sua solução. Até hoje ainda não obteve resposta. Há pouco tempo, o Prof. Picado foi renovar o seu BI. Na página de instruções do impresso, o ponto 2 afirma "se já tem BI, indique o respectivo nº, incluindo o dígito mais à direita (chamado dígito de controlo e que serve para verificar se a ordem dos algarismos está correcta)". Quando entregou os documentos, disse com toda a razão à funcionária que o atendeu, "Olhe que isto no meu caso não é verdade". A funcionária não disse nada, dirigiu-lhe um olhar estranho, e limitou-se a aceitar os papéis e a atender o mais rapidamente possível aquele utente tão especial… |