La bande MRZ, kezako ?
                              
Auteur : Rafale Papier
Zine : Rafale #19bis

Pourquoi cette suite de lettres, de chiffres et de symboles sur la partie 
inférieure du recto de ta carte d'identité ? Comment les décrypter et, par voie 
de conséquence, les générer ?



Cette partie de la CNI (Carte nationale d'identité - bout de papier qui peut 
s'avérer utile pour tout un tas de trucs dans la vie) est une bande optique. 
Dans tout les pays européens, elle constitue un point de sécurité majeur de la 
carte d'identité. Elle entre notamment en jeu lors d'un contrôle à n'importe 
quelle frontière de l'espace Schengen : la bâtarde de la Paf (Police aux 
frontières - sale espèce) passe ta CNI dans un petit appareil qui ressemble à 
s'y méprendre à un sabot de carte bleue et qui est relié à un ordinateur - le 
logiciel calcule alors si cette suite de chiffres, lettres et symboles est « 
logique ». Si elle ne l'est pas, ta carte est fausse. Attention, les porcs ne 
sont pas les seuls à pouvoir vérifier l'authenticité d'une bande MRZ. Tout un 
tas d'entreprises peuvent faire de même. Par exemple, si tu veux ouvrir un 
compte bancaire, ton futur conseiller va lui aussi, avec son petit logiciel, 
vérifier les clefs de contrôle contenues dans la bande MRZ. Que faut-il 
comprendre par suite « logique » ? Elle l'est en vertu d'un algorithme, qui 
détermine (et permet de vérifier) les trois clefs de contrôles (clefs de 
contrôles générées par les autres chiffres, lettres et symboles de la bande 
MRZ). Comment ? Tu n'es pas sûr de tout comprendre ? Puisqu'on sent qu'on est en 
train de te perdre, on va décrypter pas à pas cette bande MRZ. Et seulement 
ensuite, nous reviendrons au calcul des trois clefs de contrôles.

Décryptage

- Première ligne

A) IDFRA

Ces cinq premières lettres sont invariantes (si on s'en tient à une CNI 
française : le FRA correspond au code du pays).

B) VIDO

Nom de famille du porteur de la CNI, suivi d'autant de « < » que nécessaires 
pour finir la ligne, à l'exception des six derniers chiffres. Les espaces, 
apostrophes et tirets sont remplacés par le caractère « < » et le nom est 
tronqué à 25 caractères si besoin.

C) 34

Département qui a décerné la CNI. Dans notre exemple, il s'agit de Montpellier, 
dans le département de l'Hérault : 34.

D) 1

C'est le chiffre du canton (compris entre 1 et 9). Renseigne-toi sur le nombre 
de cantons existant dans le département où est censée avoir été créée ta CNI (de 
préférence, mets un petit chiffre, comme 1 ou 2, histoire d'être sûr). 
Attention, si ta carte a été émise à Paris, ce chiffre devient une lettre, qui 
correspond à l'arrondissement où elle a été délivrée.

E) 016

Numéro (compris entre 001 et 020) du bureau qui a pris en charge le dossier de 
réalisation de ta CNI. On s'en fout, tu l'inventes.


- Deuxième ligne

F) 1312

Dans l'ordre : année et mois d'émission de la carte. Ici, décembre 2013 
(attention, la date doit bien sûr correspondre à ce qui est inscrit au verso de 
la CNI).

G) 3410

Correspond aux quatre premiers caractères, après les « < », sur la première 
ligne.

H) 0897

Caractères attribués aléatoirement par le centre qui a délivré ta CNI. Invente-
les.

I) 1

Première clef de contrôle.

J) THOMAS

Prénom du porteur de la CNI. En cas de prénom composé, le trait d'union est 
remplacé par un « < ». Si le porteur a un second prénom, celui-ci apparaît 
aussi, séparé du premier par deux « < ». Mais attention, si ces deux prénoms 
sont trop longs, il faudra tronquer le deuxième de façon à laisser place aux 
neuf caractères qui restent. Par exemple, si le deuxième prénom de Rafale était 
Christophe (ce n'est pas le cas sur l'image du dessus !), nous aurions : 
THOMAS<Clefs de contrôle

Bien. Rentrons dans le vif du sujet : le calcul des trois clefs de contrôle. À 
quoi servent-elles, ces clefs ? À nous les brouter et à nous obliger à reprendre 
des cours de maths. Comblons ces lacunes accumulés dans le petit parc du lycée 
lorsque tu séchais les cours. Mais si les lignes suivantes te paraissent 
absolument imbuvables, sache qu'il existe des logiciels disponibles sur le Dark 
Web pour calculer ces clefs à ta place. Ils restent toutefois difficiles à 
trouver, et une partie d'entre eux commettent des erreurs de calcul. En 
revanche, des logiciels ou des sites internet – fiables, eux – permettent de 
vérifier que tu n'as pas commis d'erreur dans tes calculs : tu rentres 
l'ensemble des caractères de ta bande MRZ, et tu sais alors si les clefs sont 
bonnes. Autant se la jouer à l'ancienne, donc : on sort son papier, son crayon, 
ses quelques neurones, et on se met au taf.


Pour le calcul de chacune des trois clefs de contrôle, la méthode est la même. 
Ce qui diffère, ce sont les caractère que l'on va soumettre à ce
calcul. Plus exactement, pour calculer la :

1ère clef de contrôle - I

Caractères pris en compte dans le calcul : 1 à 12, de la deuxième ligne
(ce qui correspond dans notre image à F, G et H).

2e clef de contrôle - L

On prend en compte les chiffres 28 à 33 (c'est-à-dire les six chiffres de la 
date de naissance : K).

3e clef de contrôle - N 

On prend en compte tout les caractères : les 36 de la première ligne, ainsi que 
les 35 de la seconde (le 36e caractère étant la clef de contrôle qu'on est en
train de chercher).

Avant de passer au calcul proprement dit, voici deux informations essentielles, 
qui ne concernent que la troisième clef de contrôle. Tu vas en effet devoir 
transformer les lettres alphabétiques et les signes « < » en chiffres pour les 
rentrer dans le calcul. C'est simple. Il te faut remplacer tout les « < » par 0. 
Quant aux caractères alphabétiques, tu calcules leur valeur de la façon suivante 
: tu prends leur valeur Ascii, et tu soustrais 55. L'Ascii est une norme de 
codage de caractères en informatique. Chaque caractère trouve un équivalent 
chiffré. Ainsi un A (majuscule !) vaut 65, un B vaut 66. C'est comme ça, on n'y 
peut rien… Dans notre calcul : A = 65 - 55 = 10. Et B = 66 – 55 = 11. Tu 
trouveras facilement les tableaux Ascii sur l'Internet mondial du monde.

 Voilà, tu as maintenant tous les paramètres nécessaires, tu peux passer au 
 calcul. Comment faire ? Ça semble ardu, mais c'est tout simple. En te basant 
 sur ta suite de caractères, tu vas :

• Multiplier, dans l'ordre, le premier caractère par 7, le deuxième par 3, le 
troisième par 1, puis à nouveau le suivant par 7, et le cinquième par 3, le 
sixième par 1... etc.

• Additionner toutes les multiplications, et ne conserver que le dernier chiffre 
du résultat final : c'est la clef de contrôle.


Si on reprend notre exemple

1ère clef de contrôle
La suite qu'on soumet au calcul : 131234100897
Le calcul : 1 x 7 + 3 x 3 + 1 x 1+ 2 x 7 + 3 x 3 + 4
x 1 + 1 x 7 + 0 x 3 + 0 x 1 + 8 x 7 + 9 x 3 + 7 x 1 = 141
Le dernier chiffre, qui est notre clef de contrôle, est 1.

2e clef de contrôle
La suite qu'on soumet au calcul : 910830
Le calcul : 9 x 7 + 1 x 3 + 0 x 1 + 8 x 7 + 3 x 3 + 0 x 1 = 131
Le dernier chiffre, qui est notre clef de contrôle, est 1.

3e clef de contrôle
La suite qu'on soumet au calcul :
IDFRAVIDO<<<<<<<<<<<<<<<<<<<<<3410161312341008971
THOMAS<<<<<<<<9108301M
Suite qui devient :
18.13.15.27.10.31.18.13.24.00000000000000000000034
10161312341008971.29.17.24.22.10.28.000000009108301.22
Le calcul :
18 x 7 + 13 x 3 + 15 x 1 + 27 x 7 + 10 x 3 + 31 x 1 + 18 x 7 +
13 x 3 + 24 x 1 + 0 x 7 + 0 x 3 + 0 x 1+ 0 x 7 + 0 x 3 + 0 x 1 +
0 x 7 + 0 x 3 + 0 x 1 + 0 x 7 + 0 x 3 + 0 x 1 + 0 x 7 + 0 x 3 +
0 x 1 + 0 x 7 + 0 x 3 + 0 x 1 + 0 x 7 + 0 x 3 + 0 x 1 + 3 x 7 +
4 x 3 + 1 x 1 + 0 x 7 + 1 x 3 + 6 x 1 + 1 x 7 + 3 x 3 + 1 x 1 +
2 x 7 + 3 x 3 + 4 x 1 + 1 x 7 + 0 x 3 + 0 x 1 + 8 x 7 + 9 x 3 +
7 x 1 + 1 x 7 + 29 x 3 + 17 x 1 + 24 x 7 + 22 x 3 + 10 x 1 +
28 x 7 + 0 x 3 + 0 x 1 + 0 x 7 + 0 x 3 + 0 x 1 + 0 x 7 + 0 x 3 +
0 x 1 + 9 x 7 + 1 x 3 + 0 x 1 + 8 x 7 + 3 x 3 + 0 x 1 + 1 x 7 +
22 x 3 = 1558
Notre troisième clef de contrôle est 8.

Avis aux programmeurs : tous ces calculs mathématiques étant franchement 
ennuyeux, on vous file – cadeau surprise – les scripts idoines. Le premier est 
le pseudo-code qui permet de voir la structure générale, si tu veux le 
programmer toi-même ; le second est un
script python.


Pseudo-code
facteurs = {7, 3, 1}
résultat = 0
Pour chaque caractère,
position dans lectureOptique :
si caractère est "<":
valeur = 0
ou si caractère est dans "A".."Z":
valeur = valeurAscii(caractère) - 55
ou si caractère est dans "0".."9":
valeur = entier(caractère)
résultat += valeur × facteur[position mod 3]
cléDeControle = résultat mod 10

Script python
>>> def ClefControl(chars):
factor = [7, 3, 1]
result = 0
for index, char in enumerate(chars.upper()):
if char == '<':
char = 0
elif char >= 'A' and char <= 'Z':
char = ord(char) - 55
else:
char = int(char)
result += char * factor[index % 3]
return str(result % 10)
>>> ClefControl("IDFRAVIDO<<<<<<<<<<<<<<<<<<<<<
3410161312341008971THOMAS<<<<<<<<9108301M")
'8'