栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

vb.net 生成条码 (code39)

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

vb.net 生成条码 (code39)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
欢迎大家捧场:《Visual Basic.Net 循序渐进》

由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供的参考。

学习更多vb.net知识,请参看 vb.net 教程 目录

这是很早以前写的代码了,今天有网友需要,我就发到这里,可能有更多的人需要。
模块中的代码:

Module Module1

    ''' 
    ''' 扫描线设置
    ''' 
    ''' 
    Public Structure BarSetup
        ''' 
        ''' 条码线高度
        ''' 
        ''' 
        Dim intBqgd As Integer
        ''' 
        ''' 是否启用标签
        ''' 
        ''' 
        Dim blUseBq As Boolean
        ''' 
        ''' 标签字体
        ''' 
        ''' 
        Dim ftBqzt As Font
        ''' 
        ''' 标签内容对齐方式
        ''' 
        ''' 
        Dim intBqdq As Integer
        ''' 
        ''' 条码起始位置Y
        ''' 
        ''' 
        Dim intBqjl As Integer
    End Structure


    Public BarCodeSetup As BarSetup

End Module

窗体的设计很简单,就一个图片框,一个按钮,一个文本框。都使用的默认名称。

窗体中的代码:

Public Class Form1
    Dim picHeight As Integer
    Dim picWidth As Integer

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim picWidth As Integer = 300
        Dim picHeight As Integer = 70

        Dim bmp As Bitmap = DrawBarcode(TextBox1.Text, picWidth, picHeight)
        PictureBox1.Image = bmp

    End Sub


    Private Function DrawBarcode(ByVal Code As String, ByVal picWidth As Integer, ByVal picHeight As Integer) As Bitmap

        Dim myBmp As New Bitmap(picWidth, picHeight)
        Dim g As Graphics = Graphics.FromImage(myBmp)
        g.PageUnit = GraphicsUnit.Pixel
        g.Clear(Color.White)

        Dim mStringFormat As New StringFormat
        Dim myBrush As New SolidBrush(Color.Black)
        Dim myPen As New Pen(Color.Black)
        'Dim myPen As New Pen(Color.Black, 0.2F)
        Dim TextHeight As Integer
        Dim LabelY As Integer
        Dim myLabel As New Label

        Dim bqzt As New Font("宋体", 10, FontStyle.Regular, GraphicsUnit.Point)

        Dim nLine As Integer = 1
        Dim wLine As Integer = nLine * 3

        Dim PenW As New Pen(Color.Black, wLine)
        Dim PenN As New Pen(Color.Black, nLine)


        Dim z, X, Y, pos As Short
        Dim Bardata As String
        Dim Cur As String
        Dim CurVal As Integer
        Dim chksum As Integer


        Dim BC(43) As String
        BC(0) = "000110100" '0
        BC(1) = "100100001" '1
        BC(2) = "001100001" '2
        BC(3) = "101100000" '3
        BC(4) = "000110001" '4
        BC(5) = "100110000" '5
        BC(6) = "001110000" '6
        BC(7) = "000100101" '7
        BC(8) = "100100100" '8
        BC(9) = "001100100" '9
        BC(10) = "100001001" 'A
        BC(11) = "001001001" 'B
        BC(12) = "101001000" 'C
        BC(13) = "000011001" 'D
        BC(14) = "100011000" 'E
        BC(15) = "001011000" 'F
        BC(16) = "000001101" 'G
        BC(17) = "100001100" 'H
        BC(18) = "001001100" 'I
        BC(19) = "000011100" 'J
        BC(20) = "100000011" 'K
        BC(21) = "001000011" 'L
        BC(22) = "101000010" 'M
        BC(23) = "000010011" 'N
        BC(24) = "100010010" 'O
        BC(25) = "001010010" 'P
        BC(26) = "000000111" 'Q
        BC(27) = "100000110" 'R
        BC(28) = "001000110" 'S
        BC(29) = "000010110" 'T
        BC(30) = "110000001" 'U
        BC(31) = "011000001" 'V
        BC(32) = "111000000" 'W
        BC(33) = "010010001" 'X
        BC(34) = "110010000" 'Y
        BC(35) = "011010000" 'Z
        BC(36) = "010000101" '-
        BC(37) = "110000100" '.
        BC(38) = "011000100" '
        BC(39) = "010101000" '$
        BC(40) = "010100010" '/
        BC(41) = "010001010" '+
        BC(42) = "000101010" '%
        BC(43) = "010010100" '*  (used for start/stop character only)

        pos = 0
        Bardata = "*" & Code & "*"

        For X = 1 To Len(Bardata)
            Cur = Mid(Bardata, X, 1)
            Select Case Cur
                Case "0" To "9"
                    CurVal = Val(Cur)
                Case "A" To "Z"
                    CurVal = Asc(Cur) - 55
                Case "-"
                    CurVal = 36
                Case "."
                    CurVal = 37
                Case " "
                    CurVal = 38
                Case "$"
                    CurVal = 39
                Case "/"
                    CurVal = 40
                Case "+"
                    CurVal = 41
                Case "%"
                    CurVal = 42
                Case "*"
                    CurVal = 43
                Case Else
                    DrawBarcode = myBmp
                    Exit Function
            End Select
            chksum = chksum + CurVal
        Next

        For X = 1 To Len(Bardata)
            Cur = Mid(Bardata, X, 1)

            Select Case Cur
                Case "0" To "9"
                    CurVal = Val(Cur)
                Case "A" To "Z"
                    CurVal = Asc(Cur) - 55
                Case "-"
                    CurVal = 36
                Case "."
                    CurVal = 37
                Case " "
                    CurVal = 38
                Case "$"
                    CurVal = 39
                Case "/"
                    CurVal = 40
                Case "+"
                    CurVal = 41
                Case "%"
                    CurVal = 42
                Case "*"
                    CurVal = 43
            End Select


            For Y = 1 To 9
                If Y Mod 2 = 0 Then     '空
                    Select Case Mid(BC(CurVal), Y, 1)
                        Case "0"        '窄
                            pos += nLine
                        Case "1"        '宽
                            pos += wLine
                    End Select

                Else                    '条码
                    Select Case Mid(BC(CurVal), Y, 1)
                        Case "0"        '窄
                            g.DrawLine(PenN, pos, BarCodeSetup.intBqjl, pos, BarCodeSetup.intBqjl + BarCodeSetup.intBqgd)
                            pos += nLine
                        Case "1"        '宽
                            For k As Integer = 0 To wLine - 1
                                g.DrawLine(PenN, pos, BarCodeSetup.intBqjl, pos, BarCodeSetup.intBqjl + BarCodeSetup.intBqgd)
                                pos += 1
                            Next
                    End Select
                End If
            Next
            pos += nLine
        Next

        Dim Rect As New Rectangle(0, 0, pos, TextHeight)

        LabelY = TextHeight + BarCodeSetup.intBqgd + IIf(BarCodeSetup.blUseBq, BarCodeSetup.intBqjl, 0)
        Rect.X = 0
        Rect.Y = LabelY
        Rect.Width = pos
        Rect.Height = myLabel.Height

        If BarCodeSetup.blUseBq Then
            mStringFormat.Alignment = BarCodeSetup.intBqdq
            mStringFormat.LineAlignment = StringAlignment.Center
            g.DrawString(Code, bqzt, myBrush, Rect, mStringFormat)      '绘制条码对应的文字
        End If

        DrawBarcode = myBmp
    End Function

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        BarCodeSetup.blUseBq = True
        BarCodeSetup.ftBqzt = New Font("宋体", 12)
        BarCodeSetup.intBqgd = 40
        BarCodeSetup.intBqdq = 0
        BarCodeSetup.intBqjl = 1
    End Sub
End Class

将就手中的某件商品的编码生成的:

 

经过测试,淘宝和京东都可以识别出这个条码。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/955336.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号