Code Barre 2 of 5 et calcul de Checksum [Résolu]

Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 6 nov. 2006 à 16:44 - Dernière réponse :
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 7 nov. 2006 à 02:34
Bonjour à tous.
J'utilise cette source pour imprimer mes codes barres ( 2 parmi 5 ),  Mais je n'arrive pas à mettre le checksum à la fin de celui-ci, pourtant le calcul de checksum est bien géré dans la source ....
http://www.vbfrance.com/codes/CODE-BARRE-CODE39-EAN13-5I_34654.aspx

Je fait ceci pour imprimer mon codebarre :


' Code barre 1 Ligne 1
DDate = MDate
Printer.FontSize = 8
Printer.FontBold = True
Printer.CurrentX = 800
Printer.CurrentY = 1150
Printer.Print "N° dossier"
CodeBarre = Format(DDate, "1" & "yymmdd" & Seqd.Text)     'C'est ici à la suite que je veux ajouter mon checksum.
CalibrageTrait = 1
Style = 2
Epaisseur1Trait = 19
nHauteur = 590
nLargeur = 18
nHautDec = 20
Col = 45
Lig = 1370
Call CodBar(CodeBarre, CalibrageTrait, nHauteur, nLargeur, nHautDec, _
                  Col, Lig, Epaisseur1Trait, Style, Paramc, ImprimerTxt, _
                  NomPolice, TaillePolice, DecalTxt)


DecalTxt = 50
CalibrageTrait = 5
Epaisseur1Trait = 10
Paramc = "Code25i"
NomPolice = "Times New Roman"
TaillePolice = 10
ImprimerTxt = "1"
Printer.FontName = NomPolice


Ce qui me donne un Code sur 11 Caractères.
Ma question est donc, Comment ajouter le Checksum à la fin de mon codebarre par rapport à cette source ( apparament le calcul de checksum est intégré mais je n'arrive pas à l'utiliser )

Est ce que quelqu'un pourait regarder ?




Merci d'avance ;)

Yohann
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 6 nov. 2006 à 17:23
3
Merci
Le cancre --> Il s'agit ici d'un code barre de type "2 of 5 interleaved" ou si tu préfrère "2 parmis 5 entrelacé". Ce code ne permet de coder que des chiffres dont le nombre est illimité mais obligatoirement pair. Le codage se fait sur 5 blocs pour 2 chiffres, le premier étant codé sur les barres noires, le second sur les barre blanches.

yohann59 --> La source n'est visiblement pas complète, il y a bien un calcul du checksum, mais c'est un simple calcul. aucun résultat n'est rajouter au code. Il est prevu un emplacement pour un message d'erreur si le checksum n'est pas valide, mais aucun message de codé. Il smeblerait que c'est une fonctionnalité que l'auteur n'a pas terminé.
Le mieux est que tu te fasse ta propre routine de calcul du checksum en fonction de tes besoins.
Tu epux je pense même refaire ta propre source en élaguant tout ce que tu n'a pas besoin.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_casy
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 6 nov. 2006 à 16:47
0
Merci
Est-tu sur que cette instruction fonctionne : CodeBarre = Format(DDate, "1" & "yymmdd" & Seqd.Text)

Elle me parrait quelque peu bizarre

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Commenter la réponse de cs_casy
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 6 nov. 2006 à 16:56
0
Merci
En faite tout fonctionne très bien si par exemple je met ceci :
CodeBarre = Format(DDate, "1" & "yymmdd" & Seqd.Text) & "1"

Ce qui me donne un codebarre à 12 chiffres donc ok il s'imprime comme il faut
Si je supprime le & "1"

Je passe à 11 et du coup le code barre n'est plus valide puisque il faut un nombre paire de caractères.
je voudrais donc à la place du & "1" mettre le calcul du checksum

Mais même si tu veux tester plus facilement, telecharge la source dans mon poste précédent et teste simplement le fichier donné en exemple.
avec :
CodeBarre = "1234567890"   'ca fonctionne bien
CodeBarre = "123456789"     'ca ne marche plus
et moi je veux utiliser le "123456789" avec en 10eme caractére le calcul du checksum

Je n'y arrive pas mais c'est peut être aussi parce que je débute et donc je ne comprend pas tout.

Yohann
Commenter la réponse de cs_yohann59
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 17:09
0
Merci
y'a un truc que j'ai du mal à comprendre

et moi je veux utiliser le "123456789" avec en 10eme caractére le calcul du checksum

pour un ean 2/5 ...tu peux avoir soit 2 ou 5 maxi et non un truc de 1234567890

et de plus, il ne faut pas utiliser la police ...elle est pas tres précise surtout quand on agrandit le codebarre
Commenter la réponse de le cancre
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 17:13
0
Merci
voici ma fonction pour ean2/5

Public Function Code25(strCode As String)
Dim tmp(20) As String
Dim Bar1, Bar2, Bar3, Bar4
If Not IsNumeric(strCode) Then
   MsgBox "Veuillez respecter la norme du code ean 2/5"
   Exit Function
End If
    Bar1 = Split("1,2,3,4,5,6,7,8,9,0", ",")
    Bar2 = Split("3-1-1-1-3,1-3-1-1-3,3-3-1-1-1,1-1-3-1-3,3-1-3-1-1,1-3-3-1-1,1-1-1-3-3,3-1-1-3-1,1-3-1-3-1,1-1-3-3-1", ",")
sBar = "1111"
For i0 = 1 To Len(strCode)
    For i1 = 0 To UBound(Bar1)
        If Mid(strCode, i0, 1) = Bar1(i1) Then
        tmp(i0 - 1) = Bar2(i1)
    End If
    Next i1
Next i0
i0 = 0
Do Until i0 = Len(strCode)
    Bar3 = Split(tmp(i0), "-")
    Bar4 = Split(tmp(i0 + 1), "-")
    For i1 = 0 To 4
        sBar = sBar & Bar3(i1) & Bar4(i1)
    Next i1
    i0 = i0 + 2
Loop
sBar = sBar & "311"
End Function
Commenter la réponse de le cancre
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 6 nov. 2006 à 17:18
0
Merci
Je ne comprend  pas le 2 parmi 5 peut être codé sur autant de caractères que tu veux
la seule contrainte est qu'il faut un nombre de caractères paire dans le code barre

Yohann
Commenter la réponse de cs_yohann59
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 17:28
0
Merci
oui j'ai sauté trop vite ^^ .... en effet
ca remonte à longtemps(mon apprentissage sur les codes barres)
Commenter la réponse de le cancre
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 6 nov. 2006 à 17:29
0
Merci
Merci Pour ces précisions !
Je vais regarder ça ...
Ca sent le mal de crane

Yohann
Commenter la réponse de cs_yohann59
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 17:41
0
Merci
voici l'adresse d'un site qui ma vachement aider à l'epoque pour apprendre
http://grandzebu.net/informatique/codbar/code25I.htm

si tu veux une démo sans police dis le moi
Commenter la réponse de le cancre
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 6 nov. 2006 à 17:46
0
Merci
Ahh ba je veux bien oui !
Merci pour le lien ça devrait pas mal m'aider ...

Yohann
Commenter la réponse de cs_yohann59
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 19:02
0
Merci
Re,


picturebox : pic
et une textbox


voici le code (t'as juste à faire un copier/coller)


Dim sBar As String, i0 As Integer, i1 As Integer

Private Function Code25(strCode As String)
Dim tmp(20) As String
Dim Bar1, Bar2, Bar3, Bar4
    Bar1 = Split("1,2,3,4,5,6,7,8,9,0", ",")
    Bar2 = Split("3-1-1-1-3,1-3-1-1-3,3-3-1-1-1,1-1-3-1-3,3-1-3-1-1,1-3-3-1-1,1-1-1-3-3,3-1-1-3-1,1-3-1-3-1,1-1-3-3-1", ",")
sBar = "1111"
For i0 = 1 To Len(strCode)
    For i1 = 0 To UBound(Bar1)
        If Mid(strCode, i0, 1) = Bar1(i1) Then
        tmp(i0 - 1) = Bar2(i1)
    End If
    Next
Next
i0 = 0
Do Until i0 = Len(strCode)
    Bar3 = Split(tmp(i0), "-")
    Bar4 = Split(tmp(i0 + 1), "-")
    For i1 = 0 To 4
        sBar = sBar & Bar3(i1) & Bar4(i1)
    Next
    i0 = i0 + 2
Loop
sBar = sBar & "311"
Debug.Print Len(sBar)
End Function

Private  Function Barcode(strCode As String, Pic As Object, barHeight As Single, StartX As Single, startY As Single)
Dim barWidth As Single, i0 As Integer, barStart As Single, barscale As Integer
barscale = 1
Dim iA
strCode = IIf(Len(strCode) Mod 2 > 0, strCode & "0", strCode): Code25 strCodePic.Picture Nothing: barStart StartX
For iA = 1 To Len(sBar)
     barWidth = barWidth + Mid(sBar, iA, 1) * barscale + 1
Next iA
barscale = barscale + 1
For i0 = 1 To Len(sBar)
    barWidth = Mid(sBar, i0, 1) * barscale
    If i0 Mod 2 > 0 Then Pic.Line (barStart, startY)-Step(barWidth, barHeight), Pic.ForeColor, BF
    barStart = barStart + IIf(i0 Mod 2 > 0, barWidth, barWidth * 1.3)
Next i0
Pic.FontSize = 16
Pic.CurrentX = 20
Pic.Print strCode
Pic.Picture = Pic.Image: Pic.Refresh
End Function

Private Sub Command1_Click()
 Call Barcode(Text1.Text, Pic, 100, 20, 20)
End Sub


 








 
Commenter la réponse de le cancre
Messages postés
292
Date d'inscription
mercredi 25 octobre 2006
Dernière intervention
27 novembre 2009
- 6 nov. 2006 à 19:05
0
Merci
ah oui!
le scalemode de la pic doit etre en pixel
Commenter la réponse de le cancre
Messages postés
12
Date d'inscription
vendredi 31 janvier 2003
Dernière intervention
15 janvier 2008
- 7 nov. 2006 à 02:34
0
Merci
Merci !

Yohann
Commenter la réponse de cs_yohann59

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.