Printing BarCodes
Printing barcodes from your application is quite easy, as long as you get to know a simple algorithm (for the specific barcode symbology you're interested in) and you have a valid font file. Searching via Google on this subject is sometimes hard enough, because the top results come for commercial components or font distributors.
In this article, I present a simple implementation for the code 128 specification, with the corresponding true type font file.
The font
You can get the font from http://www.dafont.com/code_128.font. This page contains a images for all character contained in the ttf file and a download link for the ttf itself (http://www.dafont.com/download/?os=win&file=code_128) (Released under GNU public license). In case of the above urls are not working, just google with "code128.ttf" or "code 128 font".
The algorithm
You can get a complete description of the algorithm used at http://www.barcodeman.com/info/c128.php3. You should focus at the steps to calculate the check digit.
Code usage
It's quite simple. When you have the text you want to print as barcode, all you have to do is pass it through GetBarCodeText function and display it using the Code128 font. You can use it the same way to include it on crystal reports or any other reporting system that can use true type fonts.
If you use it, remember to distribute the ttf file with your application setup project.
The code
Public Module Code128
Public Function GetBarCodeText(ByVal text As String) As String
Return GetCharacter(StartB) & text & GetCharacter(GetCheckDigitCode(text)) & GetCharacter(StopB)
End Function
Private Function GetCheckDigitCode(ByVal text As String) As Integer
Dim Sum As Integer = 104
For CharacterCounter As Integer = 0 To text.Length - 1
Sum += (CharacterCounter + 1) * GetCharacterCode(text.Substring(CharacterCounter, 1))
Next
Return Sum Mod 103
End Function
Private Const StartB As Integer = 104
Private Const StopB As Integer = 106
Private Function GetCharacterCode(ByVal value As String) As Integer
If value.Length > 1 Then Throw New System.ArgumentOutOfRangeException
Select Case value
Case " "
Return 0
Case "!"
Return 1
Case """"
Return 2
Case "#"
Return 3
Case "$"
Return 4
Case "%"
Return 5
Case "&"
Return 6
Case "'"
Return 7
Case "("
Return 8
Case ")"
Return 9
Case "*"
Return 10
Case "+"
Return 11
Case ","
Return 12
Case "-"
Return 13
Case "."
Return 14
Case "/"
Return 15
Case "0"
Return 16
Case "1"
Return 17
Case "2"
Return 18
Case "3"
Return 19
Case "4"
Return 20
Case "5"
Return 21
Case "6"
Return 22
Case "7"
Return 23
Case "8"
Return 24
Case "9"
Return 25
Case ":"
Return 26
Case ";"
Return 27
Case "<"
Return 28
Case "="
Return 29
Case ">"
Return 30
Case "?"
Return 31
Case "@"
Return 32
Case "A"
Return 33
Case "B"
Return 34
Case "C"
Return 35
Case "D"
Return 36
Case "E"
Return 37
Case "F"
Return 38
Case "G"
Return 39
Case "H"
Return 40
Case "I"
Return 41
Case "J"
Return 42
Case "K"
Return 43
Case "L"
Return 44
Case "M"
Return 45
Case "N"
Return 46
Case "O"
Return 47
Case "P"
Return 48
Case "Q"
Return 49
Case "R"
Return 50
Case "S"
Return 51
Case "T"
Return 52
Case "U"
Return 53
Case "V"
Return 54
Case "W"
Return 55
Case "X"
Return 56
Case "Y"
Return 57
Case "Z"
Return 58
Case "["
Return 59
Case "\"
Return 60
Case "]"
Return 61
Case "^"
Return 62
Case "_"
Return 63
Case "`"
Return 64
Case "a"
Return 65
Case "b"
Return 66
Case "c"
Return 67
Case "d"
Return 68
Case "e"
Return 69
Case "f"
Return 70
Case "g"
Return 71
Case "h"
Return 72
Case "i"
Return 73
Case "j"
Return 74
Case "k"
Return 75
Case "I"
Return 76
Case "m"
Return 77
Case "n"
Return 78
Case "o"
Return 79
Case "p"
Return 80
Case "q"
Return 81
Case "r"
Return 82
Case "s"
Return 83
Case "t"
Return 84
Case "u"
Return 85
Case "v"
Return 86
Case "w"
Return 87
Case "x"
Return 88
Case "y"
Return 89
Case "z"
Return 90
Case "{"
Return 91
Case "|"
Return 92
Case "}"
Return 93
Case "~"
Return 94
Case Else
Return 0
End Select
End Function
Private Function GetCharacter(ByVal value As Integer) As String
Select Case value
Case 0
Return " "
Case 1
Return "!"
Case 2
Return """"
Case 3
Return "#"
Case 4
Return "$"
Case 5
Return "%"
Case 6
Return "&"
Case 7
Return "'"
Case 8
Return "("
Case 9
Return ")"
Case 10
Return "*"
Case 11
Return "+"
Case 12
Return ","
Case 13
Return "-"
Case 14
Return "."
Case 15
Return "/"
Case 16
Return "0"
Case 17
Return "1"
Case 18
Return "2"
Case 19
Return "3"
Case 20
Return "4"
Case 21
Return "5"
Case 22
Return "6"
Case 23
Return "7"
Case 24
Return "8"
Case 25
Return "9"
Case 26
Return ":"
Case 27
Return ";"
Case 28
Return "<"
Case 29
Return "="
Case 30
Return ">"
Case 31
Return "?"
Case 32
Return "@"
Case 33
Return "A"
Case 34
Return "B"
Case 35
Return "C"
Case 36
Return "D"
Case 37
Return "E"
Case 38
Return "F"
Case 39
Return "G"
Case 40
Return "H"
Case 41
Return "I"
Case 42
Return "J"
Case 43
Return "K"
Case 44
Return "L"
Case 45
Return "M"
Case 46
Return "N"
Case 47
Return "O"
Case 48
Return "P"
Case 49
Return "Q"
Case 50
Return "R"
Case 51
Return "S"
Case 52
Return "T"
Case 53
Return "U"
Case 54
Return "V"
Case 55
Return "W"
Case 56
Return "X"
Case 57
Return "Y"
Case 58
Return "Z"
Case 59
Return "["
Case 60
Return "\"
Case 61
Return "]"
Case 62
Return "^"
Case 63
Return "_"
Case 64
Return "`"
Case 65
Return "a"
Case 66
Return "b"
Case 67
Return "c"
Case 68
Return "d"
Case 69
Return "e"
Case 70
Return "f"
Case 71
Return "g"
Case 72
Return "h"
Case 73
Return "i"
Case 74
Return "j"
Case 75
Return "k"
Case 76
Return "I"
Case 77
Return "m"
Case 78
Return "n"
Case 79
Return "o"
Case 80
Return "p"
Case 81
Return "q"
Case 82
Return "r"
Case 83
Return "s"
Case 84
Return "t"
Case 85
Return "u"
Case 86
Return "v"
Case 87
Return "w"
Case 88
Return "x"
Case 89
Return "y"
Case 90
Return "z"
Case 91
Return "{"
Case 92
Return "|"
Case 93
Return "}"
Case 94
Return "~"
Case 104
Return ChrW(204)
Case 106
Return ChrW(206)
Case Else
Return " "
End Select
End Function
End Module