TEST DE VALIDITÉ EAN13

ACHPI32 Messages postés 50 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 9 mai 2009 - 9 août 2012 à 13:17
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 19 oct. 2012 à 15:23
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/54498-test-de-validite-ean13

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
19 oct. 2012 à 15:23
Pas mal, mais ta fonction devrais être complété avec un status bien spécifique pour chaque cas : n'est pas un EAN13, est un EAN13, est un EAN13 strict (clé valide).

voici une possible correction : qui renvois 3 status différent : Invalide (esInvalid), ok EAN13 (esLike), ok EAN13 clé valide (esStrict)

type
TEAN13STATUS = (
esInvalid,
esLike,
esStrict
);

Function EAN13Check(aInput:string): TEAN13STATUS;
Var
X, KeyCalc:integer;
int_extract: array[0..12] of integer;
begin
result := esInvalid;
// Test : longueur = 13 caractères
if length(aInput) <> 13 then
exit;

// Test : tout les caractères sont des chiffres
for X := 1 to 13 do
begin
if not tryStrToInt(aInput[X], int_extract[X-1]) then
exit;
end;

result := esLike;

// calcul de la clé
keycalc := 0;
for x := 0 to 11 do
begin
if (X and 1) = 1 then
keycalc := keycalc + int_extract[x]*3
else
keycalc := keycalc + int_extract[x];
end;
keycalc := 10 - (keycalc mod 10);

// Test : clé valide = EAN13 strict
if int_extract[12] = keycalc then
result := esStrict;
end;
ACHPI32 Messages postés 50 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 9 mai 2009
24 sept. 2012 à 23:52
Bah la tu vois c'est le genre de réponse que j'aime bien ! (ceci dit je garde un réserve quand même) ;-)
nakos91 Messages postés 12 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 11 novembre 2010
23 sept. 2012 à 21:50
je suis responsable des systèmes d'encaissement pour des supermarchés mais pas système U; mais je peux t'affirmer que tout code barre à 13 chiffres est un ean 13 sauf si c'est un code à 6 ou 8 ou 10 chiffres que tu complètes à 13 chiffres avec des 0 devant, là, la règle n'est pas la même car en fait ce sont des codes UPC que tu transformes en EAN13
ACHPI32 Messages postés 50 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 9 mai 2009
23 sept. 2012 à 19:15
Bonsoir,

Sans certitude de la marque MDD, il me semble que j'ai eu un invalide avec un produit U, ayant bien 13 caractères donc sous forme d'EAN.

Je n'ai pas eu de soucis avec les marques.

Bon coding
nakos91 Messages postés 12 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 11 novembre 2010
23 sept. 2012 à 11:25
Si les marques MDD utilisent des EAN13 ils répondront obligatoirement à la norme sinon ce ne sont pas des EAN , les codes ne feront 13 caractères.
Afficher les 6 commentaires