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'
|