Bonjour,
Voici une petite fonction qui permet de calculer l'intégrité d'un code barre EAN13.
Remarque : Les MDDs (Marques De Distributeur) peuvent être reconnues comme invalide.
Pour réaliser cette fonction j'espère avoir bien compris la méthode provenant du site GS1 (voir en bas de page) :
http://www.gs1.org/barcodes/support/check_digit_calculator
Pour la suite, je dois effectuer des tests sur une fonction de décodage poids/prix à partir d'un code barre de supermarché...
Source / Exemple :
Function EAN13_CheckDigit(input:string):Boolean;
Var
X,KeyCalc:integer;
int_extract: Array of integer;
begin
keycalc:=0;
setlength(int_extract,length(input));
For x:=0 to length(input)-1 do
int_Extract[x]:=strtoint(input[x+1]);
For x:=0 to length(input)-2 do
if odd(x) then keycalc:=keycalc+int_extract[x]*3 else
keycalc:=keycalc+int_extract[x];
keycalc:=10-(keycalc mod 10);
if int_extract[12]=keycalc then result:=true else
result:=false;
end;
Conclusion :
Après divers essais ceci semble fonctionner, veuillez bien lire la remarque sur les MDDs...
Bon coding.
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.