Proyecto ForMate
SESIONES 20/27-02-2007
CÓDIGOS PARA DETECTAR ERRORES.
Dado cualquier número entero n, llamamos sacar sietes de n al procedimiento consiste en restar o sumar 7 (según n sea positivo o negativo, respectivamente) a n de manera repetida hasta que el resultado de la última operación, r, sea un número entero comprendido entre 0 y 6, ambos inclusive, es decir, hasta que se cumpla que 0 ≤ r < 7.
Ejercicio 1.- Sacar los sietes de n=38
38-7=31; 31-7=24; 24-7=17; 17-7=10; 10-7=3. Entonces r=3.Se dice que n es congruente con r módulo 7 y se escribe nº r (mod 7). En el ejemplo anterior escribiríamos 38º3 (mod 7).
Ejercicio 2.- Sacar los sietes de los números
-45, 77, -8 y 40.
De la misma forma, podemos sacar de un número n los ochos, los
dieces, los veintes...
Ejercicio 3.- Sacar los nueves y los onces de los números 22, 27, -32, 99
El último ejercicio pone de manifiesto que si n es un número
grande, el procedimiento descrito puede resultar demasiado largo.
Para acortarlo, proponemos dos métodos, que podrán emplearse según
sean las circunstancias del problema.
Método de la división: Para calcular n º r (mod m), basta con dividir n entre m. El resto de la división es el valor de r buscado.
Ejercicio 5.- Encontrar el valor de r en la congruencia 458 º r (mod 12)
Al dividir 458 entre 12 se obtiene 38 como cociente y 2 como resto, es decir, 458=38·12+2. Entonces, r=2 y 458 º 2 (mod 12).Método de la separación: Para calcular n º r (mod m) podemos separar el número n en sumandos, calcular la congruencia módulo m para cada sumando y sumar los resultados (volviendo a calcular la congruencia módulo m si fuera necesario).
Ejercicio 6.- Calcula 458 º r (mod 12)
Hacemos, por ejemplo, 458=400+50+8. Dividimos 400 entre 12 y nos quedamos con el resto (le sacamos los doces). Da 4. Lo mismo hacemos con 50: le sacamos los doces y da 2. Al 8 no le podemos sacar doces. Entonces, tenemos que 458 º 400+50+8 º 4+2+8 º 14 º 2 (mod 12).Ejercicio 7.- Calcula r en las siguientes congruencias:
Ejercicio 8.- ¿Para qué tipo de números n se cumple que n
º
0 (mod
5)?¿Y n º
0 (mod 8)? ¿Y n
º
0 (mod m)?
Las dos propiedades de las congruencias que más usaremos en lo que sigue son:
La Ley de cancelación nos dice que las congruencias se
llevan bien con la suma de números enteros. Si dos números
son congruentes, podemos sumarles (o restarles) a ambos el mismo
número entero y los resultados de las sumas (o las restas) siguen
siendo congruentes y, todo, sin cambiar el módulo de la
congruencia. En cambio, la Ley de simplificación nos dice
que las congruencias ya no se llevan tan bien con el producto (o
la división) de enteros. Para dividir los dos miembros de una
congruencia entre el mismo número, es necesario dividir también el
módulo. El módulo permanecerá intacto sólo en los casos en los que
simplifiquemos entre un número que no tenga divisores comunes con
él.
|
El código de los cheques bancarios es del tipo N-c donde N es un número de siete cifras y c es un número de una cifra tales que N º c (mod 7). |
El dígito c se llama dígito de control y sirve para
controlar que el número N esté bien tecleado.
|
a1-a2a3a4a5a6a7-a8a9a10a11a12a13 tal que (a1+a3+a5+a7+a9+a11+a13)+3(a2+a4+a6+a8+a10+a12) º 0 (mod 10) |
Los primeros dígitos especifican el país o área geográfica a la
que pertenece el fabricante del producto. Para España se utilizan
los dígitos 84. El siguiente grupo de dígitos (cuyo tamaño puede
ser variable) corresponden al fabricante. El último grupo de
dígitos corresponden al producto específico del que estamos
leyendo su código de barras. El último dígito, a13, es el
dígito de control c que se pone para que la operación
anterior sea un múltiplo de 10, es decir,
congruente con 0 módulo 10.
|
a1a2-a3a4a5-a6a7a8a9a10 tal que 10a1+9a2+8a3+7a4+6a5+5a6+4a7+3a8+2a9+a10 º 0 (mod 11) |
Los grupos de dígitos pueden ser distintos. El dígito a10
puede interpretarse como el dígito de control c que se
pone para que la operación anterior sea un múltiplo de 11. A
veces, es necesario que a10=10, pero como 10 está compuesto
por dos dígitos, se sustituye este valor por el número romano
X.
Igual que en el código de barras, los primeros dígitos identifican
el país o zona geográfica del editor del libro (para España
también se usa el 84). El siguiente grupo se refiere al editor del
libro y el último grupo al título del mismo.
Ejercicio 19.- Halla los dígitos de control de los siguientes ISBN:
Con la intención de que los códigos ISBN se parezcan lo máximo posible a los códigos de barras y simplificar y unificar así la gestión de códigos (por ejemplo, para comercios en los que no sólo se vendan libros), la comunidad internacional ha propuesto un nuevo algoritmo para el ISBN, llamado ISBN-13, idéntico al algoritmo del código de barras que entrará en vigor en 2007. El código ISBN-13 consta de trece dígitos, como los códigos de barras. Ya que los primeros dígitos del código de barras se refieren al país del fabricante del producto, los tres primeros del ISBN-13 serán siempre 978, lo que identifica al producto como un libro (estos tres dígitos son conocidos por el nombre de bookland, es decir, país de los libros). Por tanto, para adecuar los antiguos ISBN al nuevo método, se les añadirá 978 como los tres primeros dígitos y se recalculará el dígito de control.
Ejercicio 21.- Recalcula los ISBN de los libros que aparecen en el ejercicio 2.3.1|
a1a2a3a4-a5a6a7a8-a9a10a11a12-a13a14a15a16 tal que (a2+a4+a6+a8+a10+a12+a14+a16)+2(a1+a3+a5+a7+a9+a11+a13+a15)+número de dígitos en posición impar mayores que 4 º 0 (mod 10) |
|
a3a4a5a6-a7a8a9a10-a0b0-b1b2b3b4b5b6b7b8b9b10 tal que 4a3+8a4+5a5+10a6+9a7+7a8+3a9+6a10+a0 º 0 (mod11) y b1+2b2+4b3+8b4+5b5+10b6+9b7+7b8+3b9+6b10+b0 º 0(mod 11) |
Para recordar este algoritmo, nótese que cada ai y cada bi
van multiplicados por el doble (calculado módulo 11) del número
que multiplica a ai-1 o a bi-1, salvo en los casos de
a1 y b1, que van multiplicados por 1. En este sentido, se
considera que el subíndice 0 vale 11.
Los dígitos de control son a0 y b0. Pudiera ser que tanto
uno como otro deban valer 10. En estos casos, se sustituye este
valor por un 1, lo que crea cierta ambigüedad en el algoritmo.
|
N-L tal que N es un número de ocho dígitos (que constituye el DNI de cada persona) y L es una letra que se asigna calculando r en N º r (mod 23) y aplicando la siguiente tabla. |
| r | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
| L | T | R | W | A | G | M | Y | F | P | D | X | |
| r | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| L | B | N | J | Z | S | Q | V | H | L | C | K | E |
Ejercicio 25.- Calcula el NIF de los siguientes DNI:
Algunos de los algoritmos presentados son capaces de detectar estos errores y otros no. La manera de detectar un error es comprobar si el dígito de control es correcto. Imaginemos que al teclear el número de cheque 4501282-2, cometemos un error y tecleamos 4503282-2. El programa de ordenador que estamos utilizando debe llevar un subprograma que, inmediatamente, calcula el dígito de control, lo compara con el dígito de control tecleado y, en caso de no ser iguales, lanza un mensaje de aviso.
Ejercicio 27.- Al introducir el cheque 4501282-2 en el ordenador, se ha tecleado por error el código 4503282-2. ¿Detectará el ordenador este error? ¿Por qué?