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

cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015 - 19 févr. 2010 à 10:20
 raph - 17 déc. 2015 à 07:15
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
fred_paris19 Messages postés 1 Date d'inscription jeudi 23 novembre 2006 Statut Membre Dernière intervention 16 novembre 2010
16 nov. 2010 à 19:18
Ç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
cs_Warny Messages postés 473 Date d'inscription mercredi 7 août 2002 Statut Membre Dernière intervention 10 juin 2015
19 févr. 2010 à 10:20
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.
Rejoignez-nous