30/06/2008

Bilhete de Identidade

Num post anterior falei sobre algoritmos de verificação, e dei dois exemplos (o primeiro não é fiável =P). Hoje vou falar sobre o algoritmo de verificação dos BIs portugueses e do seu "pequeno" problema.
O algoritmo de verificação dos bilhetes de identidade e o seguinte:


9x1+8x2+7x3+6x4+5x5+4x3+3x2+2x1+y=z

z:11

Simplificando (ou não...) o x1 representa o primeiro algarismo do numero do BI, o x2 o segundo, o x3 o terceiro e assim sucessivamente, o y representa o algarismo de controlo.
O algarismo de controlo é aquele número que está num quadradinho ao lado do número do bilhete de identidade, esse algarismo é que vai permitir confirmar a validade do número do BI. Ao contrario do que muitos pensam esse algarismo não informa sobre o número de pessoas que têm um nome igual ao nosso, é apenas um algarismo de controlo.
Portanto multiplicamos 9 ao primeiro algarismo, 8 ao segundo, 7 ao terceiro e por aí a diante, nos BIs com 7 algarismos deve-se multiplicar o primeiro algarismo por 8 em vez de 9, como se pode ver no exemplo abaixo.
(imagem tirada do site da spm)
Somamos, às somas dos resultados as multiplicações, o algarismo de controlo e ao resultado desta operação (z) dividimos onze. A divisão tem que dar resto de zero, caso contrario o número é falso.
Este algoritmo é perfeitamente normal, mas há um problema relacionado com o algarismo de controlo. O valor deste algarismo pode ir de 0 a 10, mas só se pode escrever um número no quadradinho, quando o algarismo vale 0 é o zero que está lá, quando vale 10 também é um zero que lá está, ou seja o problema é saber se, no caso das pessoas que têm um 0 como algarismo de controlo o problema está em saber se esse zero representa mesmo um zero ou se representa um dez.
No caso do ISBN (o código de identificação de livros) o algoritmo de verificação é semelhante ao do BI, mas no caso do ISBN não há problema com o algoritmo, pois foi adoptada uma boa solução: quando o número de controlo é zero é um zero que lá está, quando o número é dez, este está representado por X (dez em numeração romana) e assim não há enganos. As entidades que decidiram sobre que solução dar ao problema de "Como representar o número 10 com apenas um algarismo?" devem ter achado que as pessoas que tivessem um X se poderiam sentir descriminadas, mas de qualquer maneira podiam ter arranjado outra solução!

8 comentários:

alf disse...

Em tempos correu a teoria de que as pessoas que tinham o «0» estariam «marcadas», imagino o que seria com um X...

Uma solução poderia ser usar sempre uma letra de controlo: A para 1, B para 2, etc...

Mas afinal para que servirá este controlo? Interno aos próprios serviços para detectarem se efectuaram algum erro? Nesse caso não precisaria de estar impresso no BI. Ou é para detectar BI's falsos? Hoje parece-me que há maneiras muito melhores, consulta-se a base de dados... mas pode ser que quando isso foi introduzido isto pudesse ser útil para controlo em fronteiras e aeroportos

(eu devia ir à wikipedia em vez de estar aqui a conjecturar, não é?)

Metódica disse...

Alf

Pode conjecturar a vontade, este é um espaço para exposição e troca de ideias por isso sinta-se à vontade =)

O número supostamente é para detectar BIs falsos, pois como algoritmo de verificação tem como função verificar a validade do número de identidade.
Mas de pouco serve, pelo menos não é usado, nunca nos perguntam pelo número de verificação só o do BI, a não ser que seja para renovar o bilhete.

Sim, penso que hoje em dia devem haver maneiras diferentes de detectar a verecidade de um BI, embora não conheça nenhuma (posso ver se encontro qualquer coisa)...
Acho que também dá para ver pelo tipo de papel, se reparar ao papel não é amarelo, o papel é branco e tem "Portugal" escrito a letras amarelas muito pequeninas, também deve dar para ver pelo carimbo.

Mas agora estão a implantar os novos BIs em formato cartão e esses devem ser mais dificeis de falcificar =P
E devem ter mantido o mesmo sistema de verificação.

Penso que todos os códigos de identificação tem que ter um algoritmo de verificação e com número do BI não podia ser diferente, foi este o algoritmo que arranjaram...

zeroz disse...

mas porquê isto tudo?

Metódica disse...

Olá Zeroz bem vindo.

O "isto" é relativo a quê?

zeroz disse...

nem nós sabemos...Mas vê nisto um comprimento e não uma negação.
SE fosse em binários será um sim e nunca um não.

beijinhos e/ou abraços

Metódica disse...

Ok :)
Obrigada pelo cumprimento!

Bjinhos/abraços

anonimodenome disse...

não estão a colocar bem o problema.
de certeza que não é para detectar BIs falsos.
tal como nas notas não serve para detectar notas falsas.
os algoritmos são simples, e mal escolhidos.
a intenção do check digito (Ckd) é a de evitar erros na transcrição do conjunto (nº propriamente dito e Ckd) para suportes digitais.
a recolha de dados é muito sujeita a erros e assim diminui-se a quantidade de erros. só com um dígito de controlo ainda passam muitos erros que o algoritmo valida.
o NIB tem 19 dígitos + 2 ckd no final. com esse algoritmo, sem ir coonfirmar, creio que apanha todos os erros de um só dígito (e, sem afiançar, creio que já dará para fazer a correcção do erro) e dará conta da maior parte dos erros que envolvam dois dígitos.

a solução que o estado deveria ter usado, mesmo que só com um dígito de ckd, era ter junto o ckd no final do num. propriamente dito, de modo a fazerem uma unidade de leitura. assim nem davam por ele e não sentiam discriminação. X é que não.
na bd tenho perto de 1 milhão de números de BI mas muitos estão errados porque não foi feita a recolha com o Ckd.
É o que dá estar em separado. Assim perde completamente a eficácia.
se tiverem de imprimir/transmitir informação fidedigna juntem sempre check dígitos, depois de estudarem o tema, depois na recolha manual ou automática recolhem os dados e os ckd, automaticamente aplicam o algoritmo para validar os dados. As transmissões de informação têm falhas. as pessoas trocas os dedos, são disléxicas, etc. um 1 parece um 7, um quatro mal desenhado pode passar por um nove. os 6 por oito ou por 0.
ou o 0 por O (zero por Ó).

Metódica disse...

Anonimodenome

Tem razão!
Foi um erro meu: esqueci-me de fazer referencia a esse facto.
Os algoritmos de verificação são usados quase sempre para saber se um número de indentificação foi registado correctamente.


Sim essa teria sido uma boa solução, ninguem dava pelo número de verificação e ele ia junto ao número de BI.

(eu não digo que os algoritmos de verificação decidem se um BI ou uma nota são verdadeiros ou falsos mas, pelo menos no caso das notas ajudam imenso. Se se der conta que uma das suas notas tem um número incorrecto das duas uma ou houve um problema na impressão ou e falsa)