[UDF] _ean13.au3 et Code-barre

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
Gollem
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 24 juin 2008 18:29
Status : Hors ligne

[UDF] _ean13.au3 et Code-barre

#1

Message par Gollem »

Bonjour,
Je vous propose un UDF pour le calcul de la valeur numérique d'un barcode 13 et de le transformer en code ean13 utilisable par la font ean13.ttf

Ce script est inspiré d'un forum vbasic

Code : Tout sélectionner

Func _EAN13($chaine)
  ; Traduit par Gollem d'un forum Vbasic
  ;'Paramètres : une chaine de 12 chiffres
  ;'Retour : * une chaine qui, affichée avec la police EAN13.TTF, donne le code barre
  ;'         * une chaine vide si paramètre fourni incorrect
  Dim $i, $checksum, $first, $CodeBarre, $tableA
  $EAN13 = ""
  
  ;'Vérifier qu'il y a 12 caractères
  If StringLen($chaine) = 12 Then
    ;Et que ce sont bien des chiffres
    For $i = 1 To 12
      If Asc(STRINGMid($chaine, $i, 1)) < 48 Or Asc(stringMid($chaine, $i, 1)) > 57 Then
            $i = 0
            Exit
        EndIf
    Next
  
  If $i = 13 Then
      ;'Calcul de la clé de contrôle

    For $i = 2 To 12 Step 2
        $checksum = $checksum + stringMid($chaine, $i, 1)
    Next
    
    $checksum = $checksum * 3

    For $i = 1 To 11 Step 2
        $checksum = $checksum + stringMid($chaine, $i, 1)
    Next
    
        
      $chaine = $chaine & 10-(mod ($checksum,10))
      ;Le premier chiffre est pris tel quel, le deuxième vient de la table A
      $CodeBarre = stringLeft($chaine, 1) & Chr(65 +(stringMid($chaine, 2, 1)))
      $first = stringLeft($chaine, 1)
      
      For $i = 3 To 7
        $tableA = False
      
      Select 
        Case $i = 3
          
          
                if $first = 0  Then $tableA = True
                if $first = 1  Then $tableA = True
                if $first = 2  Then $tableA = True  
                if $first = 3  Then $tableA = True              
        Case $i = 4
          
                if $first = 0  Then $tableA = True
                if $first = 4  Then $tableA = True
                if $first = 7  Then $tableA = True  
                if $first = 8  Then $tableA = True  
        Case $i = 5
          
                if $first = 0  Then $tableA = True
                if $first = 1  Then $tableA = True
                if $first = 4  Then $tableA = True  
                if $first = 5  Then $tableA = True
                if $first = 9  Then $tableA = True
        Case $i = 6
          
                if $first = 0  Then $tableA = True
                if $first = 2  Then $tableA = True
                if $first = 5  Then $tableA = True  
                if $first = 6  Then $tableA = True
                if $first = 7  Then $tableA = True
        Case $i = 7
          
                if $first = 0  Then $tableA = True
                if $first = 3  Then $tableA = True
                if $first = 6  Then $tableA = True  
                if $first = 8  Then $tableA = True
                if $first = 9  Then $tableA = True
        EndSelect

        If $tableA Then
          $CodeBarre = $CodeBarre & Chr(65 + stringMid($chaine, $i, 1))
        Else
          $CodeBarre = $CodeBarre & Chr(75 + stringMid($chaine, $i, 1))
        EndIf
      
      Next
        
        $CodeBarre = $CodeBarre & "*"   ;'Ajout séparateur central
        For $i = 8 To 13
            $CodeBarre = $CodeBarre & Chr(97 + stringMid($chaine, $i, 1))
        Next
        $CodeBarre = $CodeBarre  & "+"   ;'Ajout de la marque de fin
        $EAN13 = $CodeBarre
    return $ean13
EndIf
  EndIf
EndFunc
 
L'utilisation est simple.
Il faut simplement spécifier que la zone texte qui recoit ce code est en font ean13.ttf

Exemple

Code : Tout sélectionner

#include "ean_13.au3"
$codeean = _ean13 ("540123456789")
MsgBox(0,"Result via clipboard",$codeean)
ClipPut($codeean)
 
Améliorations bien venue.
Gollem
EAN13.zip
(2.75 Kio) Téléchargé 357 fois
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [UDF] _ean13.au3

#2

Message par timmalos »

Post Mis en ordre

Rajout de la police,
Modification de la ligne provocant l'erreur.

La police est à mettre dans le dossier Font de Windows, typiquement:
C:\WINDOWS\Fonts
ou
C:\WINDOWS\System32\Fonts
Avatar du membre
BaKeMoNo
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 05 déc. 2008 11:26
Status : Hors ligne

Re: [UDF] _ean13.au3 et Code-barre

#3

Message par BaKeMoNo »

Bonjour,
j'ai également bricolé il y a quelques temps un petit algo d'ean13, a partir d'une source VB également, mais peut être un peu plus léger :

Code : Tout sélectionner

#Include <Misc.au3>
Global $i, $j, $total, $facteur, $ean13, $calculcle, $cle, $clefinal, $combien
Global $ean12 = InputBox("calcul de clé EAN13","entrez 12 chiffres","","",150,60)

If (StringLen($ean12) > 12) Then 
    MsgBox (0,"Erreur","Erreur de longueur du code !")  
    Exit
elseif not stringisint($ean12) Then
    MsgBox (0,"Erreur","Erreur de non numéricité !")  
    Exit
elseif (StringLen($ean12) < 12) Then
    $combien= 12-stringlen($ean12)
    for $j=1 to $combien 
        $ean12 = "0" & $ean12
    next
EndIf

$facteur = 3 

For $i = stringLen($ean12) To 1 Step -1 
    $total = $total + stringMid($ean12, $i, 1) * $facteur 
    $facteur = 4 - $facteur 
Next 

    $cle = execute("10"-Stringright($total,1))
    if $cle = 10 then $cle = 0

$ean13 = $ean12 & $cle

msgbox(0,"clé calculée", "resultat : " & $ean13 & chr(013) & "clé : " & $cle)
 
il faut bien sur rajouter une restriction sur la numéricité de la string saisie, éventuellement ajouter des "0" avant la string si la numéricité est bonne mais qu'il y a moins de 12 caractères... mais, sans ça, le script fonctionne bien.

edit. rajout des contraintes citées ci dessus.
Répondre