[Modération] Bonjour ! Pour convertir le code UPC d'un article (Universal Product Code sur 12 chiffres) en un code EAN13 valide, il suffit tout simplement de calculer la clé de contrôle (le 13ème chiffre) selon un algorithme qu'on trouve facilement sur Wikipédia ou d'autres sources. A l'attention de celles et ceux qui ont besoin de convertir une longue séquence, voici une petite fonction qui fait le travail pour vous. [windev] FONCTION CodeEAN13_Renvoyer(... // PARAMETRES. lchnCodeUPC12 est une chaîne) // VARIABLES LOCALES. lentPoids est un entier lentIndice est un entier lentSomme est un entier lentModulo est un entier // TRAITEMENT. // Calcule la clé de contrôle. lentPoids = 1 POUR lentIndice = 1 _A_ 12 lentSomme += Val(lchnCodeUPC12[[lentIndice]]) * lentPoids lentPoids = (lentPoids = 1) ? 3 SINON 1 FIN lentModulo = modulo(lentSomme,10) // Renvoie le code EAN13 (code UPC12 + clé de contrôle). SI lentModulo = 0 ALORS RENVOYER lchnCodeUPC12 + 0 SINON RENVOYER lchnCodeUPC12 + (10 - lentModulo) FIN [/windev]
J'ajoute un exemple d'appel de la fonction à adapter selon les besoins. Dans le code d'initialisation de la fenêtre, j'utilise 2 constantes qui ont pour valeur les bornes des 10000 codes UPC à générer : [windev] // CONSTANTES. CONSTANT cchnCodePremier = "370076300000" cchnCodeDernier = "370076309999" FIN [/windev] Le but est , en appelant cette procédure, de remplir une table (vide au départ) pour générer tous les codes compris entre ces bornes : [windev] PROCEDURE Fichier_GénérerCodesEAN13Internes() // VARIABLES LOCALES. lentIndice est un entier lchnRacine est une chaîne lentTaille est un entier lchnCodeUPC12 est une chaîne lchnCodeEAN13 est une chaîne // TRAITEMENT ****************************************************************************************************************************** // Génére les enregistrements correspondant à une séquence de codes EAN13 internes de l'entreprise (voir constantes). chpMessage = "Génération des codes EAN13 internes..." Sablier(Vrai) lentIndice = 1 TANTQUE cchnCodePremier[[lentIndice]] = cchnCodeDernier[[lentIndice]] lchnRacine += cchnCodePremier[[lentIndice]] lentIndice++ FIN lentTaille = 12 - Taille(lchnRacine) POUR lentIndice = Val(Droite(cchnCodePremier,lentTaille)) _A_ Val(Droite(cchnCodeDernier,lentTaille)) lchnCodeUPC12 = lchnRacine + NumériqueVersChaîne(lentIndice,"0" + lentTaille + "d") lchnCodeEAN13 = CodeEAN13_Renvoyer(lchnCodeUPC12) HRAZ(ArticlesCodes) ArticlesCodes.CodeEAN13 = lchnCodeEAN13 ArticlesCodes.Article = "" ArticlesCodes.Interne = Vrai SI PAS HAjoute(ArticlesCodes) ALORS TitreSuivant("Erreur") ErreurConstruit(... [ La tentative de création du code EAN13 interne '%1' a échoué. # %2. ], lchnCodeEAN13,HErreurInfo(hErrMessage)) Modèle_FermerFenêtre() FIN FIN Sablier(Faux) chpMessage = "" TableAffiche(tabArticlesCodes,taDébut) [/windev]