Projet académique · ESILV · 2022
Générateur de QR code
En deuxième année, j'ai écrit en C# un générateur de QR code : du texte jusqu'au fichier image, bit par bit. Voici le même algorithme porté en JavaScript. Tapez un texte, suivez chaque étape, puis abîmez le code pour voir la correction d'erreurs le réparer.
Portage web réalisé avec une assistance d'IA, à partir de mon code C# d'origine.
Essayer
- –version
- –modules
- –octets de données + correction
- –masque retenu
Étape par étape
Abîmez-le
Cliquez ou glissez sur le code pour inverser des modules, ou faites une tache au hasard. Le décodeur relit la grille à chaque modification : tant que chaque bloc a moins d'octets faux que la moitié de ses octets de correction, le texte revient intact.
Le décodeur lit directement la grille : il n'a pas à retrouver le code dans une photo. Un téléphone, lui, a besoin des trois grands carrés pour s'orienter.
Du C# au navigateur
Le projet d'origine
- Application Windows Forms en C#, qui lit et écrit des images BMP octet par octet
- Mode alphanumérique, versions 1 à 5, niveau de correction L, masque 0
- Codage, placement en zigzag, masque, format et décodeur écrits à la main ; calcul Reed-Solomon confié à des classes issues de ZXing
Ce que le portage ajoute
- Mode octet (UTF-8) : minuscules, accents et émojis
- Versions 1 à 10, quatre niveaux de correction, blocs entrelacés
- Huit masques, choisis par le calcul des pénalités de la norme
- Reed-Solomon réécrit, avec un décodeur qui corrige réellement les erreurs
Vérifié
- Les 320 combinaisons version × niveau × masque relues par jsQR, un décodeur indépendant
- Correction testée sur 3 000 blocs abîmés au hasard : tout ce qui est réparable est réparé, rien n'est « réparé » à tort au-delà
- Un bogue de l'original corrigé au passage : une paire de caractères contenant un « 0 » était codée sur 6 bits au lieu de 11
Le même projet faisait aussi du traitement d'image : filtres, convolutions, stéganographie et fractale →