Public Function ean8$(code As String)
' Calcul code barre EAN8.
' Arguments : Code [in] chaine de 8 chiffres à convertir
' Retour : String Code barre EAN8 à afficher avec la police Ean13.ttf (vide si code incorrect)
' 31/01/18 Patrice33740
Dim i%, a$
a = code
If Len(a) <> 8 Then Exit Function
For i = 1 To 8
If InStr(1, "0123456789", Mid(a, i, 1)) = 0 Then Exit Function
Next
For i = 1 To 4
Mid(a, i, 1) = Chr(Val(Mid(a, i, 1)) + 65)
Next i
For i = 5 To 8
Mid(a, i, 1) = Chr(Val(Mid(a, i, 1)) + 97)
Next i
ean8 = ":" & Mid(a, 1, 4) & "*" & Mid(a, 5, 4) & "+"
End Function
Public Function ean13$(code As String)
' Calcul code barre EAN13.
' 31/01/18 Patrice33740
Const t$ = "AAAAAA AAKAKK AAKKAK AAKKKA AKAAKK AKKAAK AKKKAA AKAKAK AKAKKK AKKAKA"
Dim i%, s%, a$, d$
a = code
If Len(a) <> 13 Then Exit Function
For i = 1 To 13
If InStr(1, "0123456789", Mid(a, i, 1)) = 0 Then Exit Function
Next
d = " " & Split(t, " ")(Left(a, 1))
s = Val(Left(a, 1))
For i = 2 To 7
s = s + Val(Mid(a, i, 1)) + Val(Mid(a, i, 1)) * 2 * ((i + 1) Mod 2)
Mid(a, i, 1) = Chr(Val(Mid(a, i, 1)) + Asc(Mid(d, i, 1)))
Next i
For i = 8 To 12
s = s + Val(Mid(a, i, 1)) + Val(Mid(a, i, 1)) * 2 * ((i + 1) Mod 2)
Mid(a, i, 1) = Chr(Val(Mid(a, i, 1)) + 97)
Next i
s = 97 + ((300 - s) Mod 10)
If Chr(s) <> Chr(Val(Mid(a, 13, 1)) + 97) Then Exit Function
ean13 = Mid(a, 1, 7) & "*" & Mid(a, 8, 5) & Chr(s) & "+"
End Function