GÉNÉRER UN CODE BARRE EAN13 ET LE SAUVEGARDER DANS UN PDF (AVEC PDFSHARP)

Signaler
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015
-
 raph -
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51310-generer-un-code-barre-ean13-et-le-sauvegarder-dans-un-pdf-avec-pdfsharp

excellente contribution!

est-ce que la fonction tete doit être utilisée dans un cas particulier?

salutations
Messages postés
1
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
16 novembre 2010

Ça marche nickel.

Un barcode EAN13 utilise normalement le 13e chiffre comme checksum. Les chiffres du code ont des poids différents selon leur emplacement, pair ou impair.
(cf http://www.easesoft.net/Upc-ean13.html)

On peut le calculer comme suit (attention le args[0] ne doit plus être que de 12 caractères).

int checksum = 0;
for (int i = 1; i<12 ; i+=2)
checksum += Convert.ToInt32(code[i]-48);
checksum *= 3;
for (int i = 0; i<12; i+=2)
checksum += Convert.ToInt32(code[i]-48);

checksum = (10 - checksum % 10) % 10;
code += checksum.ToString(); // on ajoute un 13e chiffre de checksum
Messages postés
478
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

Une petite remarque sur ton code :
Accumuler des chaîne dans une string est un tueur de mémoire.
Il faut utiliser à la place une structure de type StringBuilder spécialisée dans ce type d'utilisation.

En fait, quand tu fais "aa' + "bb" tu produits 3 chaînes en mémoire "aa", "bb" et le résultats "aabb". Ces chaînes coexistent jusqu'à ce que celles qui sont inutilisé soient mangées par le garbage collector.
Maintenant, si je rajoute "cc" à ma chaîne résultat, j'ai 5 chaînes en mémoire, celles déjà citées, plus "cc" plus "aabbcc", et aisi de suite. L'augmentation de l'occupation mémoire est comprise entre une fonction linéaire (j'ajoute la chaîne en une fois) et une augementation carrée (si j'ajoute caractère par caractère, les résultantes occuperont le carré du nombre de caractères ajoutés)
Avec un StringBuilder, on créé une structure d'une certaine taille en mémoire dans laquelle on copie brutalement les chaînes ajoutées. Si on dépasse la taille de la structure, on créé un bloc un peu plus loin. l'augmentation de la taille mémoire est linéaire, et légèrement supérieure à la taille de la chaîne résultante. Et surtout, il n'y a pas de redondance.