Bonjour.
J’essaye de faire un générateur de code barre 2D datamatrix ECC200 en python.
Mais je me heurte à un problème. Il faut générer les mots clés de correction d’erreur, pour cela on utilise le code reed solomon , et la je sèche (mon niveau d’étude (et mon petit cerveau)ne me permet pas de comprendre ce …] machin)
Voici le site qui ma déjà permis de faire une générateur de code barre (code 128) dans le passé.
grandzebu.net
La page qui traite du datamatrix
grandzebu.net/index.php?page=/in … matrix.htm
[quote=“grandzebu”]• 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 taille de la matrice. (Voir tableau ), plus exactement il dépend de la taille des blocs.
• 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 avec la matrice de 8 x 8 nous utilisons une équation comme ceci : x5 + ax4 + bx3 + cx2 + dx + e. Les nombres a, b, c, d et e sont les facteurs de l’équation polynomiale.
• Pour information l’équation est : (x - 2)(x - 22)(x - 23)…(x - 2k) Nous développons l’équation polynomiale avec l’arithmetique de Galois sur chaque facteur…
Il y a 16 tailles de bloc de code de Reed Solomon (Voir tableau ) : 5, 7, 10, 11, 12, 14, 18, 20, 24, 28, 36, 42, 48, 56, 62, 68. Les facteurs de ces 16 équations polynomiales ont étés précalculés. Vous pouvez voir le fichier des facteurs.
• Plutôt que de dessiner l’algorithme de calcul des MC de correction, je préfére vous le fournir en Basic.
Soit k le nombre de MC de correction, a le tableau des coefficients, m le nombre de MC de données, d le tableau des MC de données et c le tableau des MC de correction. Nous utiliserons aussi une variable temporaire t.
Les c et t sont initialisés à 0. Et c’est parti pour le tripatouillage mathématique :
For i = 0 To m - 1
t = (d(i) Xor c(k - 1))
For j = k - 1 To 0 Step -1
If t = 0 Then
c(j) = 0
Else
c(j) = Mult(t, a(j))
End If
If j > 0 Then c(j) = c(j - 1) Xor c(j)
Next
Next
Mult est la multiplication spéciale dans les champs de Galois.
Opérations arithmétiques dans un champ 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 champ :
Log(0) = -255
Alog(0) = 1
For i = 1 To 255
Alog(i) = Alog(i - 1) * 2
If (Alog(i) >= 256) Then Alog(i) = Alog(i) Xor 301
Log(Alog(i)) = i
Next
Maintenant nous pouvons calculer Mult = Alog((Log(a) + Log(b)) Mod 255)
[/quote]