
\begin{enumerate}
\item On cherche $a_{13}$ de sorte que:
\[
3(0+7+6+6+2+9) + (3+1+7+0+3+9+a_{13})\equiv 0\mod 10.
\]
On a alors: $113+a_{13}\equiv0\mod10$, et donc: $a_{13}\equiv7\mod10$.

\underline{La clé de ce code est donc égale à 7.}

\item Voici une proposition de code:
\begin{python}
def ean13_key(code):
    code = str(code)
    if len( code ) != 12:
        return False
    else:
        s = 0
        for k in range(len(code)):
            if k%2 != 0:
                s = s + 3 * int( code[k] )
            else:
                s = s + int( code[k] )

        return 10 - s%10
\end{python}

Il faut ici faire attention au fait que le premier chiffre (à gauche) n'est as \texttt{a[1]} mais \texttt{a[0]}. Il y a donc un décalage: ici, ce sont les chiffres de rang impairs que l'on multiplie par 3.

\item Supposons qu'un seul chiffre est erroné dans un code $a_1a_2\cdots a_{12}a_{13}$.

La question est: est-il possible que ce code produise la même clé de contrôle ?

Supposons que ce soit le cas.

\begin{itemize}
\item Supposons que le chiffre erroné soit $a'_{11}\neq a_{11}$ (ou n'importe quel chiffre de rang impair).
\begin{align*}
3\sum_{k=1}^6 a_{2k} + \sum_{k=0}^6 a_{2k+1} \equiv 0 \mod 10\\
3\sum_{k=1}^6 a_{2k} + \sum_{k=0}^4 a_{2k+1} + a'_{11} + a_{13} \equiv 0 \mod 10.
\end{align*}
En soustrayant les deux congruences, on a:
\[
a_{11}-a'_{11}\equiv0 \mod 10\qquad\text{soit}\qquad a'_{11}\equiv a_{11} \mod10.
\]
Or, $0 \leqslant a_k \leqslant 9$ et $0 \leqslant a'_k \leqslant 9$ donc cela implique que $a_{11}=a'_{11}$, ce qui est impossible par hypothèse.

\medskip


\item Supposons que le chiffre erroné soit $a'_2\neq a_2$.
\begin{align*}
3a_2 + 3\sum_{k=2}^6 a_{2k} + \sum_{k=0}^6 a_{2k+1} \equiv 0 \mod 10\\[10pt]
3a'_2 + 3\sum_{k=2}^6 a_{2k} + \sum_{k=0}^6 a_{2k+1} \equiv 0 \mod 10.
\end{align*}
En soustrayant, on obtient:
\[
3(a_2 - a'_2) \equiv 0 \mod 10.
\]
3 et 10 sont premiers entre eux donc d'après le théorème de Gauss,
\[
a_2 - a'_2 \equiv 0 \mod 10\qquad\text{et donc}\qquad a_2 \equiv a'_2 \mod 10.
\]
Donc $a_2 = a'_2$, ce qui est contradictoire avec notre hypothèse.
\end{itemize}
\underline{Ainsi, s'il n'y a qu'un seul chiffre erroné, l'erreur est détectée.}

\item Supposons que deux chiffres consécutifs $a_{2i-1}$ et $a_{2i}$ soient permutés (erreur fréquente).

On note:
\[
S=3\sum_{k=2}^6 a_{2k} + \sum_{k=0}^6 a_{2k+1} = \cdots + a_{2i-1} + 3a_{2i} + \cdots
\]
et
\[
S' = \cdots + a_{2i} + 3a_{2i-1} + \cdots
\]
\begin{align*}
\text{L'erreur n'est pas détectée} & \iff \begin{cases}
S \equiv 0 \mod 10\\
S' \equiv 0 \mod 10
\end{cases}\\[10pt]
& \iff S-S' = a_{2i-1} -a_{2i}  + 3\big(a_{2i} - a_{2i-1}\big) \equiv 0 \mod 10\\[10pt]
 & \iff 2a_{2i-1} \equiv 2a_{2i}  \mod10\\[10pt]
 & \iff a_{2i-1} \equiv a_{2i} \mod 5.
\end{align*}
(2 et 10 ne sont pas premiers entre eux donc quand on divise par 2, on divise aussi le modulo par 2).

\medskip

Ainsi, étant donné par exemple $a_{2i}$ la probabilité pour que $a_{2i} \equiv a_{2i-1} \mod 5$ tout en ayant $a_{2i} \neq a_{2i-1}$ est $\dfrac{1}{10}$.

Il y a en effet deux chiffres congrus à $a_{2i}$ modulo 5: : $a_{2i}$ et $a_{2i}\pm5$, mais $a_{2i-1}$ doit être différent de $a_{2i}$ sans quoi, la permutation des deux chiffres ne change rien au code et donc, celui-ci n'est pas erroné.
\end{enumerate}
