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 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| Public Function MakeBarCode(ByVal DataToBarCode As String)
Dim mini, i, dummy As Short
Dim checksum As Integer
Dim tableB As Boolean
MakeBarCode = ""
If Len(DataToBarCode) > 0 Then
'Vérifier si caractères valides
For i = 1 To Len(DataToBarCode)
Select Case Asc(Mid(DataToBarCode, i, 1))
Case 32 To 126
Case Else
i = 0
Exit For
End Select
Next
'Calculer la chaine de code en optimisant l'usage des tables B et C
MakeBarCode = ""
tableB = True
If i > 0 Then
i = 1 'i% devient l'index sur la DataToBarCode
Do While i <= Len(DataToBarCode)
If tableB Then
'Voir si intéressant de passer en table C
'Oui pour 4 chiffres au début ou à la fin, sinon pour 6 chiffres
mini = IIf(i = 1 Or i + 3 = Len(DataToBarCode), 4, 6)
mini = mini - 1
If i + mini <= Len(DataToBarCode) Then
Do While mini >= 0
If Asc(Mid(DataToBarCode, i + mini, 1)) < 48 Or Asc(Mid(DataToBarCode, i + mini, 1)) > 57 Then Exit Do
mini = mini - 1
Loop
End If
If mini < 0 Then 'Choix table C
If i = 1 Then 'Débuter sur table C
MakeBarCode = Chr(205)
Else 'Commuter sur table C
MakeBarCode = MakeBarCode & Chr(199)
End If
tableB = False
Else
If i = 1 Then MakeBarCode = Chr(204) 'Débuter sur table B
End If
End If
If Not tableB Then
'On est sur la table C, essayer de traiter 2 chiffres
mini = 2
mini = mini - 1
If i + mini <= Len(DataToBarCode) Then
Do While mini >= 0
If Asc(Mid(DataToBarCode, i + mini, 1)) < 48 Or Asc(Mid(DataToBarCode, i + mini, 1)) > 57 Then Exit Do
mini = mini - 1
Loop
End If
If mini < 0 Then 'OK pour 2 chiffres, les traiter
dummy = Val(Mid(DataToBarCode, i, 2))
dummy = IIf(dummy < 95, dummy + 32, dummy + 100)
MakeBarCode = MakeBarCode & Chr(dummy)
i = i + 2
Else 'On n'a pas 2 chiffres, repasser en table B
MakeBarCode = MakeBarCode & Chr(200)
tableB = True
End If
End If
If tableB Then
'Traiter 1 caractère en table B
MakeBarCode = MakeBarCode & Mid(DataToBarCode, i, 1)
i = i + 1
End If
Loop
'Calcul de la clé de contrôle
For i = 1 To Len(MakeBarCode)
dummy = Asc(Mid(MakeBarCode, i, 1))
dummy = IIf(dummy < 127, dummy - 32, dummy - 100)
If i = 1 Then checksum = dummy
checksum = (checksum + (i - 1) * dummy) Mod 103
Next
'Calcul du code ASCII de la clé
checksum = IIf(checksum < 95, checksum + 32, checksum + 100)
'Ajout de la clé et du STOP
MakeBarCode = MakeBarCode & Chr(checksum) & Chr(206)
End If
End If
End Function |
Partager