Nel mio istituto, in seguito all'introduzione del sistema dei codici QR per segnare le presenze,
non si è mai definito un metodo standard per la loro generazione.
Ogni anno si cercava qualcuno tra i maturandi che fosse in grado di crearli per tutti,
trovando così ogni volta una soluzione diversa.
Quando è toccato a me, ho colto l'occasione per imparare qualcosa di nuovo.
Sapevo che la persona precedente aveva utilizzato uno script Python, così ho iniziato
prendendo come riferimento il mio codice QR dell'anno scorso per tentare di ricrearlo.
Il primo problema è stato che i due codici non combaciavano.
Ho provato a rigenerarlo con tutti i metodi tradizionali, ma niente funzionava,
nonostante contenesse soltanto del testo semplice.
Dopo qualche ricerca, ho scoperto che i codici QR hanno vari valori di generazione non facilmente visibili,
tra cui uno che indica la
versione da utilizzare (il numero di moduli),
e un altro che specifica il
livello di correzione degli errori.
Entrambi non sono impostabili attraverso strumenti di generazione tradizionali.
A questo punto ho finalmente scoperto perché non combaciavano, evidentemente erano stati scelti
dei parametri specifici per ottimizzare la lettura dei codici da un cellulare in situazioni movimentate...
avrei potuto ignorare tutto e utilizzare i valori di default,
ma ormai ero troppo curioso per abbandonare la ricerca.
Qui è sorto il secondo problema. Seguendo la documentazione ufficiale ho analizzato i codici QR dell'anno precedente,
e ho notato che i valori della versione e ECL variavano, ma non mi era ancora chiaro in base a cosa.
Dopo essere finalmente riuscito a ricreare il mio codice QR precedente con Python grazie ad alcuni tentativi,
non riuscivo a generarne altri che combaciassero, nonostante stessi usando gli stessi valori.
Infine, dopo giorni di ulteriori tentativi, ho scoperto il segreto.
Il precedente livello di correzione degli errori utilizzato era "M", quindi del 15%, e la versione
era il primo numero più piccolo utilizzabile da 1 a 4 (anche 5, se 4 non basta!), a seconda della lunghezza del nome.
È stato questo dettaglio a confondermi così tanto, ovvero che non si trattava di valori fissi.
Appena trovata la soluzione, ho iniziato a creare un semplice generatore QR con python,
per poi aggiungere funzionalità in modo da assegnare dinamicamente i valori precedentemente discussi,
e per suddividere automaticamente i codici per classe e comprimere tutto in file zip.
Di recente, per semplificare la vita a tutti, l'ho riscritto in Javascript per renderlo utilizzabile direttamente dal mio sito web senza
il bisogno scaricare nulla, né tantomeno di impostare localmente un ambiente Python e tutte le librerie necessarie.