begin process at 2013 05 24 13:09:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > TEST DE VALIDITÉ EAN13

TEST DE VALIDITÉ EAN13


 Information sur la source

 Description

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

  • 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;
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.


 Sources du même auteur

Source avec Zip Source avec une capture BUBBLES : SPRITES TBITMAP
Source avec Zip IP INTERNET AVEC UN MODEM/ROUTEUR (INDY & SNMP)
Source avec Zip Source avec une capture MSN ID (OBTENIR VOTRE ID MSN À PARTIR DE VOTRE ADRESSE HOTMA...
Source avec Zip FONCTION LONGPATHPARAMSTR
Source avec Zip Source avec une capture PATHTRUNCATE

 Sources de la même categorie

Source avec Zip ENVOYER UN MAIL AU FORMAT HTML AVEC IMAGES INCORPORÉES DANS ... par jjgone
Source avec Zip CLASSE DATA - RESTORE par pilasse
Source avec Zip Source avec une capture FOURTOUT, GESTION DU PRESSE PAPIER par dubois77
Source avec Zip Source avec une capture GÉNÉRATEUR FICHIER DOC EN HTML par dubois77
Source avec Zip Source avec une capture MINI APPLI VIDE ! par dubois77

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture COMPOSANT CODE BARRE 39-EAN13-EAN8 par dvarrel
Source avec Zip Source avec une capture DELPHI +DBASE+ RAVEREPORT + CODEBARRE (PARTIE 1) par ada_azoul

Commentaires et avis

Commentaire de ACHPI32 le 09/08/2012 13:17:10

Le composant CODE BARRE39-EAN13-EAN8 de Dvarrel effectue le calcul de la clé de contrôle.

Commentaire de nakos91 le 23/09/2012 11:25:18

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.

Commentaire de ACHPI32 le 23/09/2012 19:15:29

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



Commentaire de nakos91 le 23/09/2012 21:50:10

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

Commentaire de ACHPI32 le 24/09/2012 23:52:17

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) ;-)

Commentaire de f0xi le 19/10/2012 15:23:06 administrateur CS

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;

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,775 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales