IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Générateur de Codes Barres EAN13 [Python 2.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Générateur de Codes Barres EAN13
    Bonjour Chers membres de la communauté Python,
    Dans le cadre des projets d'ISN de Terminale S je dois réaliser un programme qui génère une image du code barre EAN 13 au format PBM à partir du code numérique.
    Voici un lien qui détaille la structure d'un code barre EAN : https://fr.wikipedia.org/wiki/Code-barres_EAN
    On s'intéresse ici plus spécialement au EAN13 (codes barres de 13 chiffres)

    J'ai déjà une première version de programme mais celle ci ne convient pas si on se réfère aux informations obtenues sur les codes barres EAN 13 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #Saisie du code binaire utilisé dans les codes barres
    A=[[0,0,0,1,1,0,1],[0,0,1,1,0,0,1],[0,0,1,0,0,1,1],[0,1,1,1,1,0,1],[0,1,0,0,0,1,1],[0,1,1,0,0,0,1],[0,1,0,1,1,1,1],[0,1,1,1,0,1,1],[0,1,1,0,1,1,1],[0,0,0,1,0,1,1]]
    B=[[0,1,0,0,1,1,1],[0,1,1,0,0,1,1],[0,0,1,1,0,1,1],[0,1,0,0,0,0,1],[0,0,1,1,1,0,1],[0,1,1,1,0,0,1],[0,0,0,0,1,0,1],[0,0,1,0,0,0,1],[0,0,0,1,0,0,1],[0,0,1,0,1,1,1]]
    C=[[1,1,1,0,0,1,0],[1,1,0,0,1,1,0],[1,1,0,1,1,0,0],[1,0,0,0,0,1,0],[1,0,1,1,1,0,0],[1,0,0,1,1,1,0],[1,0,1,0,0,0,0],[1,0,0,0,1,0,0],[1,0,0,1,0,0,0],[1,1,1,0,1,0,0]]
    CLE=[[A,A,A,A,A,A,C,C,C,C,C,C],[A,A,B,A,B,B,C,C,C,C,C,C],[A,A,B,B,A,B,C,C,C,C,C,C],[A,A,B,B,B,A,C,C,C,C,C,C],[A,B,A,A,B,B,C,C,C,C,C,C],[A,B,B,A,A,B,C,C,C,C,C,C],[A,B,B,B,A,A,C,C,C,C,C,C],[A,B,A,B,A,B,C,C,C,C,C,C],[A,B,A,B,B,A,C,C,C,C,C,C],[A,B,B,A,B,A,C,C,C,C,C,C]]
    #Entrée des 13 chiffres du code barre et initialisation des listes
    code=list(raw_input("Entrez 13 chiffres : "))
    codebis=[]
    O=[]
    a=[1,0,1]
    ab=[0,1,0,1,0]
    #Les listes a et ab doivent toujours être au même emplacement
    #Transfert des 13 chiffres dans une liste
    for i in range (len(code)):
        codebis.append(int(code[i]))
    #Création d'une liste O comportant le code binaire correspondant au 13 chiffres entrés par l'utilisateur
    for j in range (len(code)):
        if j==0 :
            O.append(a)
        else :
            O.append (CLE[codebis[j]][0][codebis[j]])
        if j==6 :
            O.append(ab)
        if j==12:
            O.append(a)
    -Il manque la clé de contrôle
    -Il manque la différenciation en éléments A,B,C selon le premier chiffre
    (j'ai volontairement sectionné la dernière partie qui n'est que la création du fichier image)

    J'ai donc ajouté le calcul de la clé de contrôle et modifié le programme pour le rendre un peu meilleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    #intialisation des listes
    A=[[0,0,0,1,1,0,1],[0,0,1,1,0,0,1],[0,0,1,0,0,1,1],[0,1,1,1,1,0,1],[0,1,0,0,0,1,1],[0,1,1,0,0,0,1],[0,1,0,1,1,1,1],[0,1,1,1,0,1,1],[0,1,1,0,1,1,1],[0,0,0,1,0,1,1]]
    B=[[0,1,0,0,1,1,1],[0,1,1,0,0,1,1],[0,0,1,1,0,1,1],[0,1,0,0,0,0,1],[0,0,1,1,1,0,1],[0,1,1,1,0,0,1],[0,0,0,0,1,0,1],[0,0,1,0,0,0,1],[0,0,0,1,0,0,1],[0,0,1,0,1,1,1]]
    C=[[1,1,1,0,0,1,0],[1,1,0,0,1,1,0],[1,1,0,1,1,0,0],[1,0,0,0,0,1,0],[1,0,1,1,1,0,0],[1,0,0,1,1,1,0],[1,0,1,0,0,0,0],[1,0,0,0,1,0,0],[1,0,0,1,0,0,0],[1,1,1,0,1,0,0]]
    motif=[[A,A,A,A,A,A,C,C,C,C,C,C],[A,A,B,A,B,B,C,C,C,C,C,C],[A,A,B,B,A,B,C,C,C,C,C,C],[A,A,B,B,B,A,C,C,C,C,C,C],[A,B,A,A,B,B,C,C,C,C,C,C],[A,B,B,A,A,B,C,C,C,C,C,C],[A,B,B,B,A,A,C,C,C,C,C,C],[A,B,A,B,A,B,C,C,C,C,C,C],[A,B,A,B,B,A,C,C,C,C,C,C],[A,B,B,A,B,A,C,C,C,C,C,C]]
    code1=list(raw_input("Entrez 12 chiffres : "))#le treizième chffre est déterminé par une clé de contrôle
    code2=[]
    codebin=[]
    df=[1,0,1]#début et fin d'un code barre EAN 13
    mil=[0,1,0,1,0]#bande au milieu d'un code barre EAN 13
    #transfert et conversion des chiffres entrés par l'utilisateur 
    for i in range (len(code1)):
        code2.append(int(code1[i]))
     
    P= []
    I=[]
    for chiffre in code2:
        if chiffre%2:
            I.append(chiffre)
        else:
            P.append(chiffre)
    n=len(I)
    s=sum(P)
    if n==0:
        tra=s+0
    elif n==1:
        tra=s+(3*I[0])
    elif n==2:
        tra=s+(3*I[0])+(3*I[1])
    elif n==3:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])
    elif n==4:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])
    elif n==5:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])
    elif n==6:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])
    elif n==7:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])
    elif n==8:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])
    elif n==9:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])
    elif n==10:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])
    elif n==11:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])+(3*I[10])
    m=tra%10
    cle=0
    if m==0:
        cle=0
    else:
        cle=10-m
    code2.append(cle)
     
    #Création d'une liste comportant le code binaire correspondant au 13 chiffres entrés par l'utilisateur
    for k in range (len(code1)):#on parcourt le code chiffre par chiffre, le premier chiffre détermine le motif 
        if k==0 :
            codebin.append(df)
        else :
            codebin.append (motif[code2[k]][0][code2[k]])
        if k==6 :
            codebin.append(mil)
    Néanmoins, deux problèmes se posent toujours à moi, comment simplifier ce passage qui est excessivement long ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    n=len(I)
    s=sum(P)
    if n==0:
        tra=s+0
    elif n==1:
        tra=s+(3*I[0])
    elif n==2:
        tra=s+(3*I[0])+(3*I[1])
    elif n==3:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])
    elif n==4:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])
    elif n==5:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])
    elif n==6:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])
    elif n==7:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])
    elif n==8:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])
    elif n==9:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])
    elif n==10:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])
    elif n==11:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])+(3*I[10])
    J'ai déjà essayé avec des boucles for et while mais c'est un échec


    Ensuite, il s'agit de connaître le motif du code :
    -Il faut regarder le premier chiffre, il détermine le motif suivi par le code (EX: si c'est un 0 le motif du code est [A,A,A,A,A,A,C,C,C,C,C,C])
    Ma question est donc de savoir comment trouver le premier chiffre du code de l'utilisateur et associer le motif correspondant et qu'ensuite le motif associé prenne bien en compte les éléments du motif.

    NB: Je suis un débutant et je n'utilise pas de modules. De plus si je me tourne vers vous c'est que je suis en grande difficulté et que la deadline approche à grands pas. J'ai fait un travail de recherche préalable sans trouver d'éléments d'aide ni de réponses.

    Si jamais vous ne comprenez pas ma requête n'hésitez pas à demander des détails ou de plus amples explications.

    En vous remerciant d'avance de l’intérêt porté à ma requête.
    Je joins ci dessous mes coordonnées (au cas où) : twdimfs@gmail.com

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je ne sais pas si ça peut t'aider, mais j'utilise le code "code39" pour mes code-barres (https://fr.wikipedia.org/wiki/Code_39), avec simplement une police de caractère spécialisée.

    Ainsi, je fabrique avec Python une page de code-barres dans un pdf, destiné à faire des étiquettes autocollantes, en écrivant simplement avec cette police les codes alphanumériques, précédés et suivi d'un '*'. Ça se lit ensuite très bien avec les lecteurs de code-barres, à condition bien sûr de les configurer à la norme utilisée.

    Je ne connais pas assez les autres normes comme la "EAN13", mais si tu trouvais une police de caractères à installer, ce serait plus simple que ce tu es en train de faire.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci Tyrtamos d'avoir pris le temps de me répondre.
    En effet ça à l'air plus simple de passer par un code 39 mais ça ne correspondrait pas à ce que mes profs attendent. De plus je ne vois pas vraiment comment faire avec un code 39.
    Je suis donc cantonné au chemin "difficile"

  4. #4
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par twdimfs Voir le message
    Néanmoins, deux problèmes se posent toujours à moi, comment simplifier ce passage qui est excessivement long ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    n=len(I)
    s=sum(P)
    if n==0:
        tra=s+0
    elif n==1:
        tra=s+(3*I[0])
    elif n==2:
        tra=s+(3*I[0])+(3*I[1])
    elif n==3:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])
    elif n==4:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])
    elif n==5:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])
    elif n==6:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])
    elif n==7:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])
    elif n==8:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])
    elif n==9:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])
    elif n==10:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])
    elif n==11:
        tra=s+(3*I[0])+(3*I[1])+(3*I[2])+(3*I[3])+(3*I[4])+(3*I[5])+(3*I[6])+(3*I[7])+(3*I[8])+(3*I[9])+(3*I[10])
    Bonsoir,
    Et ceci:
    Clodion

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2016
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Clodion Voir le message
    Bonsoir,
    Et ceci:
    Clodion
    En effet, je me sens bête de ne pas y avoir pensé plus tôt. D'autant plus que j'ai essayé de passer par des suites absurdes pour y résoudre sans y parvenir.
    Merci bien c'est déjà un premier soulagement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Génération code barre EAN13
    Par mdr_cedrick dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2008, 09h57
  2. [FPDF] FPDF et générateur de code-barres
    Par semias dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 17/06/2008, 16h17
  3. Réponses: 2
    Dernier message: 27/05/2008, 17h21
  4. générateur de code barre
    Par AXOU91 dans le forum Access
    Réponses: 10
    Dernier message: 04/01/2007, 07h25
  5. Composant Lecteur de code barre EAN13
    Par Speedfire dans le forum Bases de données
    Réponses: 1
    Dernier message: 27/09/2006, 08h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo