在【精选】vb.net 打印条形码code39、code128A、code128C、code128Auto(picturebox和打印机)封装类_vb.net打印标签_WormJan的博客-CSDN博客
这篇文章中,没有对含有字母的编码进行处理。这里另开一篇帖子,处理这种情况。
在那篇文章中,需要修改以下方法:
//添加对字母的支持
Private Shared Function code128_num()
Dim code128 As New Dictionary(Of String, String())
code128.Add("0", {"bssbbbsbbss", 16})
code128.Add("1", {"bssbbbssbbs", 17})
code128.Add("2", {"bbssbbbssbs", 18})
code128.Add("3", {"bbssbsbbbss", 19})
code128.Add("4", {"bbssbssbbbs", 20})
code128.Add("5", {"bbsbbbssbss", 21})
code128.Add("6", {"bbssbbbsbss", 22})
code128.Add("7", {"bbbsbbsbbbs", 23})
code128.Add("8", {"bbbsbssbbss", 24})
code128.Add("9", {"bbbssbsbbss", 25})
code128.Add("A", {"bsbsssbbsss", 33})
code128.Add("B", {"bsssbsbbsss", 34})
code128.Add("C", {"bsssbsssbbs", 35})
code128.Add("D", {"bsbbsssbsss", 36})
code128.Add("E", {"bsssbbsbsss", 37})
code128.Add("F", {"bsssbbsssbs", 38})
code128.Add("G", {"bbsbsssbsss", 39})
code128.Add("H", {"bbsssbsbsss", 40})
code128.Add("I", {"bbsssbsssbs", 41})
code128.Add("J", {"bsbbsbbbsss", 42})
code128.Add("K", {"bsbbsssbbbs", 43})
code128.Add("L", {"bsssbbsbbbs", 44})
code128.Add("M", {"bsbbbsbbsss", 45})
code128.Add("N", {"bsbbbsssbbs", 46})
code128.Add("O", {"bsssbbbsbbs", 47})
code128.Add("P", {"bbbsbbbsbbs", 48})
code128.Add("Q", {"bbsbsssbbbs", 49})
code128.Add("R", {"bbsssbsbbbs", 50})
code128.Add("S", {"bbsbbbsbsss", 51})
code128.Add("T", {"bbsbbbsssbs", 52})
code128.Add("U", {"bbsbbbsbbbs", 53})
code128.Add("V", {"bbbsbsbbsss", 54})
code128.Add("W", {"bbbsbsssbbs", 55})
code128.Add("X", {"bbbsssbsbbs", 56})
code128.Add("Y", {"bbbsbbsbsss", 57})
code128.Add("Z", {"bbbsbbsssbs", 58})
code128.Add("StartA", {"bbsbssssbss", 103})
code128.Add("StartB", {"bbsbssbssss", 104})
code128.Add("StartC", {"bbsbssbbbss", 105})
code128.Add("Stop", {"bbsssbbbsbsbb", 106})
Return code128
End Function
有人私信我说,让写一个获得code128B的方法。下面把代码贴上来:
Public Shared Function get_code_128B(ByVal barcode As String)
Dim strr As String = barcode
Dim code128 As Dictionary(Of String, String()) = code128_num()
Dim code128_byid As Dictionary(Of String, String()) = code128_table()
Dim chr As String, barstr As String, final As String = ""
Dim start As String = code128.Item("StartB")(0)
final += start
'数据
For i = 0 To strr.Length - 1
chr = strr.Substring(i, 1)
barstr = code128.Item(chr)(0)
final += barstr
Next i
'校验
Dim exam As Int16
exam = code128.Item("StartB")(1)
For i = 0 To strr.Length - 1
exam += code128.Item(strr.Substring(i, 1))(1) * (i + 1)
Next i
exam = exam Mod code128.Item("StartA")(1) '注意不是StartB。应该是103
Dim excode As String = code128_byid.Item(exam)(4)
final &= excode
'stop
final += code128.Item("Stop")(0)
Return final
End Function
还有一点就是使用128C和包含128C混合编码的时候,不仅要判断是否是偶数个,还要判断是否全为数字,可以这样判断:
Dim k As Boolean = System.Text.RegularExpressions.Regex.IsMatch(“条码”, "^[0-9]+$")
经过测试没有发现遇到 I 生成失败的问题。