Mot exact Résultats par page

Index des mots-clés

AGENDA PERSONNEL
ALBUM PHOTO (Script)
ANTI SPAM
APICULTURE
BOISSONS (Recettes)
BREDELE
C++
CADRE
CHARLOTTE AUX FRUITS
CODAGE ADRESSES MAIL
CODE 2 DE 5 ENTRELACE
CODE 3 DE 9
CODE 128
CODE PDF417
CODES BARRE
CODE POSTAL
CODES VIDEOTEXT
CONFITURES
CONGOLAIS
CONSERVES (Recettes)
CORNICHONS AU VINAIGRE
COUARAIL
CUISINE (Bases)
CYBERMUT
DADANT
DATAMATRIX
DDE
DESSERTS (Recettes)
DOUBLE NAT
DYNDNSUPDATE
EAN 13
EAN 128
ELECTRONIQUE
ENTREES (Recettes)
ENVOI DE SMS
ESPACE MEMBRE
EURO
EXEMPLES VB6
FAVORIS
FONCTIONS
FONCTIONS EN C++
GUACAMOLE
IMPRIMANTES RESEAUX
INSTANCE UNIQUE
KIT VB4
LANGSTROTH
LEGUMES (Recettes)
MADELEINES
MAISONS
MAQUEREAUX AU VIN BLANC
MAQUEREAUX (Rillettes)
NMEA
NOUGATINE
PAIN
PDF417
PHP
PIC
PLANS DE MAISON
PATISSERIE (Bases)
PLANTEUR
PLATS COMPLETS (Recettes)
POISSONS (Recettes)
PROCEDURES
PROGRAMMATION
RECETTES DE CUISINE
RESSOURCES RESEAUX
R.I.B.
ROUTINES
RUCHE
SALADES (Recettes)
SAUMON EN CROUTE
SCRIPTS
SITES
SLICE
SMS
SOUPE DE COURGE
TABLE PERIODIQUE
TATIN (Tarte)
USB
VIANDES (Recettes)
VIDEOTEXT
VISUAL BASIC
VOIRNOT
WNTIPCFG

Mot exact Résultats par page
I
N
D
E
X
 

Le QR Code

English version
Ce code fait partie de la famille des codes Ă  2 dimensions, il peut encoder jusqu'Ă  7089 caractères sur une très petite surface. L'encodage se fait en deux Ă©tapes : tout d'abord les donnĂ©es sont converties en un flux de bit dĂ©coupĂ© en mots-clĂ©. (Encodage de haut niveau) puis ceux-ci sont convertis en petits carrĂ©s noirs et blancs. (Encodage de bas niveau) De plus un système de correction des erreurs permet de reconstituer des donnĂ©es mal imprimĂ©es, effacĂ©es, floues ou arrachĂ©es. Dans la suite de cet exposĂ©, l'expression "mot-clĂ©" sera abrĂ©gĂ©e en MC et code de Reed-Solomon en RS. Il existe aussi des micro QR codes non Ă©tudiĂ©s ici.

La structure générale.


L'encodage de bas niveau.

Il existe 40 versions (Tailles) de symbole. Un ensemble de paramètres est attachĂ© Ă  chaque version :
A partir de ces paramètres nous pouvons calculer d'autres valeurs, cela est fait Ă  l'aide d'une feuille de calcul : 
On va y trouver le calcul de la taille du symbole, du nombre et de l'emplacement des mires d'alignement, les surfaces occupées par les différents éléments, etc ...

Pour construire un QRcode il faut :
Numéro de masque Condition
000 (i + j) MOD 2 = 0
001 i MOD 2 = 0
010 j MOD 3 = 0
011 (i + j) MOD 3 = 0
100 ((i DIV 2) + (j DIV 3)) MOD 2 = 0
101 (i j) MOD 2 + (i j) MOD 3 = 0
110 ((i j) MOD 2 + (i j) MOD 3) MOD 2 = 0
111 ((i + j) MOD 2 + (i j) MOD 3) MOD 2 = 0

L'encodage de haut niveau

On utilisera par la suite les opĂ©rateurs : + --> addition, x --> multiplication, \ --> division entière, MOD --> reste de la division entière
Il existe 4 modes d'encodage (Compression) qui peuvent ĂŞtre mixĂ©s :
Mode de compression Données à encoder Taux de compression Indicateur de mode
Numérique Chiffres ASCII 3 chiffres dans 10 bits 0001
Alphanumérique Chiffres + lettres majuscules + 9 symboles 2 caractéres dans 11 bits 0010
Octet Octet 1 octet dans 8 bits 0100
Kanji Caractères asiatiques / 1000
Il existe d'autres indicateurs non Ă©tudiĂ©s ici : 0111 = ECI, 0011 = Multi codes, 0101 et 1001 = FNC1
0000 est l'indicateur de fin de données.

Chaque segment commence par un indicateur de mode de 4 bits suivi du nombre de caractères codé sur un nombre de bit variable (Voir tableau), suivi des données.
  • Les segments de chaque mode sont ensuite concatĂ©nĂ©s puis suivis d'un terminateur composĂ© de 4 zĂ©ros qui est l'indicateur de fin des donnĂ©es.
  • Le terminateur peut ĂŞtre abrĂ©gĂ© si cela permet le remplissage complet de la zone des donnĂ©es d'un symbole.
  • Ce flux est alors dĂ©coupĂ©s en MC de 8 bits. Si nĂ©cessaire, le dernier MC est ajustĂ© Ă  8 bits par ajout de bits 0. Si le nombre de MC ne remplit pas complètement le symbole ajouter 11101100 puis 00010001 et recommencer (236 et 17 en dĂ©cimal)
  • Les MCs sont alors divisĂ©s en un certain nombre de blocs (Voir tableau) La taille des blocs peux varier de une unitĂ©; par exemple 46 MCs divisĂ©s en 4 blocs donneront 2 blocs de 11 et 2 blocs de 12. Dans ce cas, on placera les plus petits blocs en premier.
  • Pour chaque bloc les codes de Reed Solomon sont calculĂ©s.
  • Pour finir on entrelacera les donnĂ©es puis les codes de RS comme suit :
    n est le nombre de blocs, m le nombre de MC dans chaque bloc et z le nombre de codes de RS par bloc
    data 1 du bloc 1 - data 1 du bloc 2 - ... - data 1 du bloc n
    data 2 du bloc 1 - data 2 du bloc 2 - ... - data 2 du bloc n
    ...
    data m du bloc 1 - data m du bloc 2 - ... - data m du bloc n
    puis :
    RS 1 du bloc 1 - RS 1 du bloc 2 - ... - RS 1 du bloc n
    RS 2 du bloc 1 - RS 2 du bloc 2 - ... - RS 2 du bloc n
    ...
    RS z du bloc 1 - RS m du bloc 2 - ... - RS z du bloc n

    • Le mode numĂ©rique.
      Dans ce mode on divise les données en groupes de 3 chiffres qui sont compressés dans 10 bits.
      S'il ne reste que 2 chiffres on les converti sur 7 bits et s'il ne reste qu'un chiffre on le converti sur 4 bits. Le segment comprendra donc : l'indicateur de mode 0001, le compteur de caractères (Longueur Ă  prendre dans le tableau) et les donnĂ©es.
      Exemple :
      Chaine : 34567
      Premier groupe : 345 soit 0101011001
      2ème groupe : 67 soit 1000011
      Nombre de caractères : 5
      Si code de version 3 par exemple, longueur sur 9 bits, soit : 000000101
      Segment : 0001 000000101 0101011001 1000011
    • Le mode alphanumĂ©rique.
      Dans ce mode on ne peux encoder que 45 caractères numĂ©rotĂ©s 0 Ă  44 selon le tableau suivant :
      Valeur Caractère   Valeur Caractère   Valeur Caractère   Valeur Caractère
      0 0   13 D   26 Q   39 *
      1 1   14 E   27 R   40 +
      2 2   15 F   28 S   41 -
      3 3   16 G   29 T   42 .
      4 4   17 H   30 U   43 /
      5 5   18 I   31 V   44 :
      6 6   19 J   32 W  
      7 7   20 K   33 X  
      8 8   21 L   34 Y  
      9 9   22 M   35 Z  
      10 A   23 N   36 (Espace)  
      11 B   24 O   37 $  
      12 C   25 P   38 %  
      Les caractères sont pris deux par deux et encodés sur 11 bits. Le code du premier caractère est multiplié par 45, on ajoute alors le code du 2ème caractère et la somme est convertie en binaire sur 11 bits.
      S'il reste un unique caractère, son code est converti en binaire sur 6 bits.
      Exemple :
      Chaine : ZEBU SĂ©quence : 35 14 11 30
      Premier groupe : 35 x 45 + 14 = 1589 soit 11000110101
      2ème groupe : 11 x 45 + 30 = 525 soit 01000001101
      Nombre de caractères : 4
      Si code de version 3 par exemple, longueur sur 10 bits, soit : 0000000100
      Segment : 0010 0000000100 11000110101 01000001101
    • Le mode octet.
      Ce mode peut encoder n'importe quel octet.
      Ceux-ci sont simplement convertis en binaire.
    • Le mode Kanji.
      Ce mode n'est pas étudié ici.

La détection et la correction des erreurs.

  • Le système de correction est basĂ© sur les codes de " Reed Solomon "qui font la joie des matheux et la terreur des autres ...
  • Le nombre de MCs de correction dĂ©pend de la version du code et du niveau de correction choisi ; il est donnĂ© pour chaque bloc de donnĂ©es. (Voir tableau)
  • Les codes de Reed Solomon font appel Ă  un polynome dans lequel la puissance de x est le nombre de MCs de correction d'erreur utilisĂ©. Par exemple pour un code version 1 avec niveau de correction L nous utilisons une Ă©quation permettant d'obtenir 7 RS comme ceci : x7 + ax6 + bx5 + cx4 + dx3 + ex2 + fx + g Les nombres a, b, c, d, e, f et g sont les coefficients de l'Ă©quation polynomiale.
  • Pour information l'Ă©quation est : x8 + x4 + x3 + x2 + 1 et le corps de Galois se calcule avec modulo 285.
    Il y a 36 tailles de bloc de code de Reed Solomon (Voir tableau) en incluant les micro-qrcodes. Les coefficients de ces 36 équations polynomiales ont étés précalculés. Vous pouvez voir le fichier des coefficients. On peux aussi les calculer. Mais d'abord une petite explication sur les opérations dans un corps de Galois.

    Opérations arithmétiques dans un corps de Galois de caractéristique 2.

    La somme et la diffĂ©rence sont la mĂŞme fonction : la fonction OU exclusif.
    A + B = A - B = A Xor B
    La multiplication est plus compliquĂ©e; d'abord nous devons crĂ©er 2 tableaux contenant les Logs et Antilogs du corps en fonction de son "modulo" (Ici 285) :

    Maintenant nous pouvons calculer Mult(a, b) = Alog((Log(a) + Log(b)) Mod 255)

    Voici maintenant en Basic l'algorithme pour calculer les facteurs :

    Et maintenant, toujours en Basic, l'algorithme de calcul des MC de correction.


    Retrouvez tous les calculs des codes RS des différents codes barre 2D en Visual Basic 6.
    C'est un fichier ZIP sans installation :
  • Ceux qui auront lus et compris les codes de Reed Solomon s'y retrouveront; pour les quelques ignares qui n'ont pas tout compris (Dont moi !) il suffira d'appliquer la "recette" en utilisant les codes obtenus dans l'ordre inverse (Du dernier au premier).

La création des codes barres.

Maintenant que nous savons crĂ©er le motif d'un code barre, il nous reste Ă  le dessiner Ă  l'Ă©cran et Ă  l'imprimer sur papier. Deux approches sont possibles :
  • La mĂ©thode graphique oĂą chaque barre est "dessinĂ©e" comme un rectangle plein. Cette mĂ©thode permet de calculer la largeur de chaque barre au pixel près et de travailler sur des multiples de la largeur d'un pixel du pĂ©riphĂ©rique utilisĂ©. Cela donne une bonne prĂ©cision surtout si le pĂ©riphĂ©rique a une faible densitĂ© comme c'est le cas des Ă©crans et des imprimantes Ă  jet d'encre. Cette mĂ©thode demandes des routines de programmations spĂ©cifiques et ne permet pas de rĂ©aliser des codes barres avec un logiciel courant.
  • La police spĂ©cifique dans laquelle chaque caractère est remplacĂ© par le code barre d'un caractère. Cette mĂ©thode permet d'utiliser n'importe quel programme comme un traitement de texte ou un tableur (Par exemple LibreOffice, le clone gratuit de MSoffice !) Les mises Ă  l'Ă©chelles en fonction du corps (La taille quoi) choisi peuvent entrainer de petites distorsions du dessin des barres. Avec une imprimante laser il n'y a aucun problème.
Il semble qu'il n'y ait pas de police gratuite pour codes barre QRcode sur le net. La police utilisée pour les codes Datamatrix peux parfaitement convenir. Elle se compose de 16 combinaisons assignées aux 16 premières lettres majuscules.
Si nous donnons une valeur Ă  chaque point de cette matrice de 2 X 2 comme ceci :
1 2
4 8
la valeur ASCII du caractère associé à une matrice donnée est la somme des valeurs de chaque point + 65 (65 = A = pas de point !)

La police " datamatrix.ttf " (Convient aux QRcodes)

Cette police contient les 16 caractères A (ASCII : 65) Ă  P (ASCII : 80)
Copiez ce fichier
dans le répertoire des
polices, le plus souvent :
C:\WINDOWS\FONTS

Encodage d'un QRcode

Le programme devra se dĂ©rouler en plusieurs Ă©tapes :
  • Compactage des donnĂ©es dans les MCs en utilisant les diffĂ©rents modes et en essayant d'optimiser, et si nĂ©cessaire ajout du bourrage.
  • DĂ©termination de la version (Taille) du code.
  • Placement de tous les modules de fonction (Sauf informations de format).
  • DĂ©coupage en blocs si nĂ©cessaire puis calcul des MCs de correction en fonction de la version et du niveau de correction choisi.
  • Placement des MCs dans la matrice.
  • Application des diffĂ©rents masques et choix de celui-ci après Ă©valuation des rĂ©sultats.
  • Calcul et placement des informations de format.
  • Transformation de chaque paire de ligne en chaine de caractère. La longueur de la chaine est : nombre de modules / 2. Le nombre de ligne (ou colonne) Ă©tant impair, on ajoutera Ă  droite et en bas une ligne de modules blancs.
Du fait de l'interaction entre les différents modes de compression il est difficile de faire une optimisation à 100%. La norme donne toutefois en annexe J une méthode d'optimisation ...
L'évaluation du résultat des différents masque se fera "à l'oeil" et par test des codes obtenus.

Un petit programme pour tester tout ça

TRAVAIL EN COURS

La fonction QRcode$ fait environ 900 lignes, je ne la reproduis donc pas ici, il suffit de la rĂ©cuperer dans le fichier "form1.frm" qui se trouve avec le programme ci-dessus ; avec le programme d'auto-installation le fichier "form1.frm" se trouve dans le rĂ©pertoire du programme, sous-rĂ©pertoire "sources". La fonction s'appelle de la manière suivante :
resultat$ = QRcode$(Chaine$, Level%, Mask%, Version%, CodeErr%) avec Chaine$ qui doit contenir la chaine à coder, Level% pour le niveau de correction, Mask% pour le masque à utiliser. Au retour Version% donnera la version de code (taille) utilisée et CodeErr% un éventuel numéro d'erreur. Ces deux derniers paramètres sont optionnels et sont passés par références.
Valeurs de CodeErr% au retour de la fonction :
1  : Chaine$ est vide
2  : Chaine$ contient trop de donnĂ©es.
Il suffit maintenant d'afficher ou d'imprimer la chaine resultat$ avec la police Datamatrix par exemple dans un traitement de texte. Les utilisateurs de Word pourront même intégrer la fonction QRcode$ dans une macro afin d'automatiser le traitement. Pour arriver à effectuer tous les traitements dans une unique fonction, j'ai dû utiliser des "Gosub" au lieu de fonctions avec paramètres; j'entends déjà les esthètes de la programmation hurler au sacrilège.

Vous aimez cette page ?

Elle vous est utile ?

Cliquez ici !