在【精选】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 = barcodeDim 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 - 1chr = strr.Substring(i, 1)barstr = code128.Item(chr)(0)final += barstrNext i'校验Dim exam As Int16exam = code128.Item("StartB")(1)For i = 0 To strr.Length - 1exam += code128.Item(strr.Substring(i, 1))(1) * (i + 1)Next iexam = exam Mod code128.Item("StartA")(1) '注意不是StartB。应该是103Dim excode As String = code128_byid.Item(exam)(4)final &= excode'stopfinal += code128.Item("Stop")(0)Return final
End Function
还有一点就是使用128C和包含128C混合编码的时候,不仅要判断是否是偶数个,还要判断是否全为数字,可以这样判断:
Dim k As Boolean = System.Text.RegularExpressions.Regex.IsMatch(“条码”, "^[0-9]+$")
经过测试没有发现遇到 I 生成失败的问题。