Code Barre 2 of 5 et calcul de Checksum

Résolu
cs_yohann59 Messages postés 12 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 15 janvier 2008 - 6 nov. 2006 à 16:44
cs_yohann59 Messages postés 12 Date d'inscription vendredi 31 janvier 2003 Statut Membre 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
A voir également:

13 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 nov. 2006 à 17:23
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 #
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
6 nov. 2006 à 16:47
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 #
0
cs_yohann59 Messages postés 12 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 15 janvier 2008
6 nov. 2006 à 16:56
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
0
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
6 nov. 2006 à 17:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Yohann
0
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
6 nov. 2006 à 17:41
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
0
cs_yohann59 Messages postés 12 Date d'inscription vendredi 31 janvier 2003 Statut Membre Dernière intervention 15 janvier 2008
6 nov. 2006 à 17:46
Ahh ba je veux bien oui !
Merci pour le lien ça devrait pas mal m'aider ...

Yohann
0
le cancre Messages postés 292 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 27 novembre 2009
6 nov. 2006 à 19:02
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


 








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

Yohann
0
Rejoignez-nous