ACHPI32
Messages postés50Date d'inscriptionmercredi 2 avril 2003StatutMembreDernière intervention 9 mai 2009
-
9 août 2012 à 13:17
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 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.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és50Date d'inscriptionmercredi 2 avril 2003StatutMembreDerniè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és12Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention11 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és50Date d'inscriptionmercredi 2 avril 2003StatutMembreDerniè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és12Date d'inscriptionmardi 21 janvier 2003StatutMembreDernière intervention11 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.
ACHPI32
Messages postés50Date d'inscriptionmercredi 2 avril 2003StatutMembreDernière intervention 9 mai 2009 9 août 2012 à 13:17
Le composant CODE BARRE39-EAN13-EAN8 de Dvarrel effectue le calcul de la clé de contrôle.
19 oct. 2012 à 15:23
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;
24 sept. 2012 à 23:52
23 sept. 2012 à 21:50
23 sept. 2012 à 19:15
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
23 sept. 2012 à 11:25
9 août 2012 à 13:17