check digit - cadeiras.iscte.pt

Propaganda
Diminuição da probabilidade de erro na digitação de um código numérico.
O dígito de controlo (check digit)
Seja N = a1a2a3a4a5a6a7a8a9a10 um número de dez algarismos representativo de um código de
artigo.
Os erros mais comuns na digitação de um número são:
1. Troca de um dos algarismos, como seja:
Número correcto: 7 123 409 205. A troca do a7 – o nove – pelo seis, que lhe fica junto no
teclado, daria: 7 123 406 205.
2. Troca da sequência de dois algarismos consecutivos.
Retomado o exemplo anterior, se a troca ocorresse entre os algarismos a6 e o a7 ter-se-ia:
7 123 490 205.
É fácil implementar um algoritmo que detecte se algum destes dois erros foi cometido na
digitação, escolhendo para o último algarismo – neste exemplo o cinco – um número específico,
designado por check digit ou dígito de controlo.
Um dos algoritmos mais conhecidos para determinação do dígito de controlo é o seguinte 1:
1 – Atribui-se inicialmente zero ao dígito de controlo, que se inscreve na última posição.
2 – Multiplica-se cada dígito pelo número indicador da posição que ocupa, ou seja, o primeiro
por 1, o segundo por 2, etc. até ao último.
3 – Somam-se os resultados obtidos.
4 – Determina-se o resto da divisão desse número por 11.
5 – O dígito de controlo é esse número, que deverá ser inscrito na última posição.
Aplicando o algoritmo ao exemplo acima, tem-se:
1º
2º
3º
4º
5º
6º
7º
8º
9º
10º
7
1
2
3
4
0
9
2
0
0
x
x
x
x
x
x
x
x
x
x
1
2
3
4
5
6
7
8
9
10
7
2
6
12
20
0
63
16
0
0
A soma dos valores da última linha é 126.
A divisão de 126 por 11, dá 11 e resto 5.
O dígito de verificação é portanto 5, e o código completo é 7 123 409 205.
Se se efectuar novamente o cálculo anterior, agora com o dígito de verificação correcto na
posição 10, verifica-se que o resto da divisão obtido no passo 4 é zero. Esta propriedade é
utilizada para efectuar a verificação da correcção do código, durante a leitura:
Se ocorrer o erro 1: P = 155, que dividido por 11, dá resto um.
Se ocorrer o erro 2: P = 167 que dividido por 11, dá resto dois.
1
Este algoritmo específico é o utilizado para o ISBN, International Standard Book Number, que tem 10 dígitos.
Este tipo de algoritmo garante que erros do tipo dos descritos são detectados. Muitos outros erros
de digitação são igualmente detectados com o mesmo tipo de algoritmo. Embora não se possa
dizer que a probabilidade de deixar passar um erro é nula, verifica-se que ela é, de facto,
extremamente reduzida.
Se o número de algarismos do código for diferente de dez, o algoritmo deve ser modificado no passo 5:
5a – Se o resto é zero, o dígito de controlo é o número que figura na última posição. Se não for, aumentase de uma unidade o valor do dígito que está na última posição e repete-se o processo tantas vezes até que
o resto seja zero. O dígito de controlo é o número que figura então na última posição.
Pode ler uma explicação mais detalhada em:
Jorge Buescu, O Mistério do Bilhete de Identidade e Outras Histórias, Gradiva, Lisboa, 2001.
Uma busca na internet usando o GOOGLE e a frase “check digit” produziu mais de 90 000 links,
com diversos algoritmos.
———————————— ooo O ooo ————————————
O algoritmo de cálculo do dígito de controlo para o código de barras EAN-13 2 (que tem 13
dígitos) é o seguinte 3:
1 – Atribui-se inicialmente zero ao dígito de controlo, que se inscreve na décima terceira
posição.
2 – Multiplicam-se os dígitos nas posições ímpares (primeiro, terceiro, quinto, etc. até ao
décimo terceiro) por 1.
3 – Multiplicam-se os dígitos nas posições pares (segundo, quarto, sexto, etc. até ao décimo
segundo) por 3.
4 – Somam-se os resultados obtidos.
5 – Determina-se o resto da divisão desse número por 10.
6 – O dígito de controlo a inscrever na posição 13 é a diferença entre 10 e o número
determinado no passo 5.
Exemplo: seja o código, ainda sem o dígito de controlo, 560 123 456 789.
Seguindo os passos acima descritos, tem-se:
1º
2º
3º
4º
5º
6º
7º
8º
9º
10º
11º
12º
13º
5
6
0
1
2
3
4
5
6
7
8
9
0
x
x
x
x
x
x
x
x
x
x
x
x
x
1
3
1
3
1
3
1
3
1
3
1
3
1
5
18
0
3
2
9
4
15
6
21
8
27
0
A soma dos valores da última linha é 118.
A divisão de 118 por 10, dá 11 e resto 8, e o dígito de controlo é 10 – 8 = 2.
Então o código completo, com o dígito de controlo é 560 123 456 789 2.
Se se efectuar novamente o cálculo, agora com o dígito de verificação correcto na posição 13,
verifica-se que o resto da divisão obtido no passo 5 é zero. Esta propriedade é utilizada para
efectuar a verificação da correcção do código, durante a leitura.
2
3
Uma introdução aos sistemas de codificação de código de barras e algoritmos de cálculo do dígito de controlo
pode ser encontrada em http://www.codipor.pt/ean_ucc/ean_ucc.htm.
Os códigos EAN-8, EAN-C e ITL-14 recorrem a variações deste algoritmo para determinação do dígito de
controlo.
Download