This reminds me to an helper App I’ve once made couple of years for a customer… his internal ProductNumbers and Packages should be recocnized by Handscanners. I’ve used a free EAN13 TrueType Font and made this small helper App to convert the Numbers into printable string. Something like “4260341230320” became “4CQADOL*cdadca+” and was saved side-by-side in his database. Was a challange to find out the algorithm but I remember it sounded more complicated than it really was.
Here’s a Screenshot of this little App.

The conversion algorithm is here:
function MakeEAN(ProductNumber as String) as String
Dim i, checksum, first as integer
dim CB, ean13 as String
dim tableA As Boolean
ean13 = ""
If ProductNumber.len = 13 Then
For i = 1 To 12
If Asc(Mid(ProductNumber, i, 1)) < 48 Or Asc(Mid(ProductNumber, i, 1)) > 57 Then
i = 0
Exit For
End If
Next
If i = 13 Then
For i = 12 DownTo 1 Step -2
checksum = checksum + Val(Mid(ProductNumber, i, 1))
Next
checksum = checksum * 3
For i = 11 DownTo 1 Step -2
checksum = checksum + Val(Mid(ProductNumber, i, 1))
Next
ProductNumber = ProductNumber + chr((10 - checksum Mod 10) Mod 10)
CB = Left(ProductNumber, 1) + Chr(65 + Val(Mid(ProductNumber, 2, 1)))
first = Val(Left(ProductNumber, 1))
For i = 3 To 7
tableA = False
Select Case i
Case 3
Select Case first
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CB = CB + Chr(65 + Val(Mid(ProductNumber, i, 1)))
Else
CB = CB + Chr(75 + Val(Mid(ProductNumber, i, 1)))
End If
Next
// Add middle separator
CB = CB + "*"
For i = 8 To 13
CB = CB + Chr(97 + Val(Mid(ProductNumber, i, 1)))
Next
// Add end mark
CB = CB + "+"
ean13 = CB
End If
End If
return ean13
end function