14年给别人写的一个库存软件,用到扫码枪,所以就有了这个类.

编码规则相对简单,详见百度百科EAN-13

示例运行效果如下:

类模块:cEAN13.cls

Option Explicit
'★━┳━━━━━━━━━━━━━━━━━━━━
'☆ ┃2014/10/5 18:14:58 |13位EAN-13条码条形码生成类
'☆ ┃悠悠然(QQ:2860898817,VB交流群:369088586)
'┗━┻━━━━━━━━━━━━━━━━━━━━
'-----------------------------------------------------
'文字绘制API
Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function CreateFont Lib "gdi32" Alias "CreateFontA" (ByVal h As Long, ByVal W As Long, ByVal E As Long, ByVal O As Long, ByVal W As Long, ByVal i As Long, ByVal u As Long, ByVal s As Long, ByVal c As Long, ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, ByVal PAF As Long, ByVal F As String) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Const ANSI_CHARSET = '设置语言系统,中国汉字,西欧文,中东文字等... ...
Private Const FW_HEAVY = '设置字体的粗细程度
Private Const OUT_DEFAULT_PRECIS =
Private Const CLIP_DEFAULT_PRECIS =
Private Const DEFAULT_QUALITY =
Private Const DEFAULT_PITCH =
Private Const FF_SWISS = Private Const FONT_XIE = '设置字体是否倾斜
Private Const FONT_DOWN_LINE = '设置字体是否有下画线
Private Const FONT_MID_LINE = '设置字体是否有中画线
'-----------------------------------------------------
'线条绘制API
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Const PS_SOLID =
'-----------------------------------------------------
Dim lstData(, ) As String 'A/B/C集
Dim LeftCode As String
Dim MidCode As String
Dim RightCode As String Dim Lmode() As Byte '左侧的线型即
Dim Rmode() As Byte '右侧线型集 Dim oldrndnum1 As Long '随机生成时防重复
Dim oldrndnum2 As Long '随机生成时防重复
Private myHair As Long '★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 PrintCode
'┃┃ 打印条形码到DC
'┃┃ 参数分别是 打印目标的DC句柄,条纹代码,偏移坐标X,偏移坐标Y,条码高度
'┗┻━━━━━━━━━━━━━━━━━━━━
Public Function PrintCode(printDC As Long, strCode As String, Optional devX As Long = , Optional devY As Long = , Optional LineHeight As Long = ) As Boolean
Dim SC As String
Dim LeftData As String
Dim RightData As String
Dim SS As String
SC = CheckCode(strCode)
If Len(SC) <> Then Exit Function LeftData = CreateData(Mid(SC, , ), Lmode)
RightData = CreateData(Mid(SC, , ), Rmode)
SS = LeftCode & LeftData & MidCode & RightData & RightCode Dim i As Long
Dim n As Long
Dim j As Long
For i = To Len(SS)
j = CLng(Mid(SS, i, ))
Select Case j
Case
DrawLine printDC, devX + n, devY, devX + n, LineHeight
Case
DrawLine printDC, devX + n, devY, devX + n, LineHeight +
End Select
n = n +
Next i
DrawFont printDC, Mid(SC, , ), devX + , LineHeight
DrawFont printDC, Mid(SC, , ), devX + , LineHeight
DrawFont printDC, Mid(SC, , ), devX + , LineHeight
PrintCode = True
End Function '★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 CreateData
'┃┃ 用于创建条码左右两侧的数据
'┗┻━━━━━━━━━━━━━━━━━━━━
Private Function CreateData(data As String, mode() As Byte) As String
Dim i As Long
Dim j As Long
Dim s As String
For i = To
j = CLng(Mid(data, i, ))
s = s & lstData(mode(i - ), j)
Next i
CreateData = s
End Function '★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 CreateCode
'┃┃ 创造一个条码,lastCode参数最好是9位数
'┗┻━━━━━━━━━━━━━━━━━━━━
Public Function CreateCode(Optional lastCode As Long) As String
Dim i As Long
Dim j As Long
Dim s As String
If lastCode = Then
i = DateDiff("s", "2014-1-1 12:12:12", Now)
If oldrndnum1 = i Then
Do
j = Rnd *
If j <> oldrndnum2 Then Exit Do
Loop
Else
j = Rnd *
End If
oldrndnum1 = i
oldrndnum2 = j
s = "" & i & j
Else
s = "" & CStr(lastCode + )
If Len(s) <> Then s = s & ""
End If
s = Left(s, )
Dim n() As Long
For i = To Len(s)
n(i - ) = CLng(Mid(s, i, ))
Next i
Dim m As Long
Dim v As Long
Dim h As Long
Dim sw As String
m = n() + n() + n() + n() + n() + n()
v = n() + n() + n() + n() + n() + n()
h = m + v *
sw = CStr(h)
sw = Mid(sw, Len(sw), )
h = CLng(sw)
h = - h
If h = Then h =
n() = h
For i = To
CreateCode = CreateCode & n(i)
Next i
End Function
'★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 CheckCode
'┃┃ 判断条码是否正确
'┗┻━━━━━━━━━━━━━━━━━━━━ '检测编码是否正确
Public Function CheckCode(strCode As String) As String
On Error GoTo errLine
Dim SC As String
SC = Trim(strCode)
If Len(SC) <> Then Exit Function
Dim n() As Long
Dim i As Long
For i = To Len(SC)
n(i - ) = CLng(Mid(SC, i, ))
Next i
Dim m As Long
Dim v As Long
Dim h As Long
Dim sw As String
m = n() + n() + n() + n() + n() + n()
v = n() + n() + n() + n() + n() + n()
h = m + v *
sw = CStr(h)
sw = Mid(sw, Len(sw), )
h = CLng(sw)
h = - h
If h = Then h =
If h <> n() Then Exit Function
CheckCode = SC
errLine:
End Function '★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 DrawLine
'┃┃ 画条码线
'┗┻━━━━━━━━━━━━━━━━━━━━
Private Sub DrawLine(hDC As Long, startpx As Long, startpy As Long, endpx As Long, endpy As Long)
Dim old As Long
Dim p As Long
Dim a As POINTAPI
p = CreatePen(PS_SOLID, , vbBlack) '线型,线宽,颜色
old = SelectObject(hDC, p)
MoveToEx hDC, startpx, startpy, a
LineTo hDC, endpx, endpy
SelectObject hDC, old
DeleteObject p
End Sub '★┳━━━━━━━━━━━━━━━━━━━━
'┃┃ 2014/10/5 18:14:24 DrawFont
'┃┃ 画条码数字
'┗┻━━━━━━━━━━━━━━━━━━━━
Private Sub DrawFont(ShowHdc As Long, YouStr As String, sx As Long, sy As Long)
Dim strNum As Long
Dim mFont As Long
strNum = lstrlen(YouStr)
mFont = CreateFont(, , , , FW_HEAVY, _
FONT_XIE, _
FONT_DOWN_LINE, _
FONT_MID_LINE, _
ANSI_CHARSET, _
OUT_DEFAULT_PRECIS, _
CLIP_DEFAULT_PRECIS, _
DEFAULT_QUALITY, _
DEFAULT_PITCH Or FF_SWISS, _
"宋体")
SelectObject ShowHdc, mFont
SetTextColor ShowHdc, vbBlack
TextOut ShowHdc, sx, sy, YouStr, strNum
DeleteObject mFont
End Sub Private Sub Class_Initialize()
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "":
lstData(, ) = "": lstData(, ) = "": lstData(, ) = "": Lmode() = : Lmode() = : Lmode() = : Lmode() = : Lmode() = : Lmode() = 'ABBBAA
Rmode() = : Rmode() = : Rmode() = : Rmode() = : Rmode() = : Rmode() = 'CCCCCC LeftCode = "" & ""
MidCode = ""
RightCode = "" & ""
Randomize (Time)
End Sub

VB生成条形码(EAN-13)的更多相关文章

  1. C# VB .NET生成条形码,支持多种格式类型

    条形码简单,方便印刷,因此在各个领域得到了广泛的应用.我们自己的项目里也可以将一些特定的数据以条形码的方式来展示和应用,实现一码走天下.那么如何在C#,.Net平台代码里生成条形码呢?答案是使用Sha ...

  2. <经验杂谈>C#生成条形码

    虽然二维码满天飞,但也不能忘了条形码,本篇介绍可以在C#中使用的1D/2D编码解码器.条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码: 条形码的标准: 条形码的标准有ENA条形码.U ...

  3. ZXing生成条形码、二维码、带logo二维码

    采用的是开源的ZXing,Maven配置如下,jar包下载地址,自己选择版本下载,顺便推荐下Maven Repository <!-- https://mvnrepository.com/art ...

  4. VB.Net条形码编程的方法

    一.条形码的读取用过键盘口式的扫条码工具的朋友就知道,它就如同在鍵盘上按下数字鍵一样,基本不需任何编程和处理.但如果你使用的是其它接口的话,可能你就要为该设备编写通讯代码了.以下有一段简单的25针串口 ...

  5. 生成条形码插件 条形码--JsBarcode

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code 介绍一下在GitHub生成条形码的js插件→JsBarcode 条码支持的有: CODE128 ...

  6. zxing 生成条形码

    private Bitmap Out1DImg() { // 1.设置条形码规格 EncodingOptions encodeOption = new EncodingOptions(); encod ...

  7. js生成条形码

    生成条形码 <body> <div> <img id="ma"/> </div> </body> </html&g ...

  8. js生成条形码——JsBarcode

    原文地址:https://www.cnblogs.com/huangenai/p/6347607.html 介绍一下在GitHub生成条形码的js插件→JsBarcode 条码支持的有: CODE12 ...

  9. 备忘录——关于C#生成条形码

    目录 0. 背景说明 1. 使用ZXing.NET 2. 使用BarcodeLib 3. 使用字体 4. 参考 志铭-2022年2月15日 22:15:46 0. 背景说明 在.net程序中生成69码 ...

随机推荐

  1. QuerySet

    ################################################################## # PUBLIC METHODS THAT ALTER ATTRI ...

  2. [经验交流] 影响 kubernetes 稳定性的因素

    使用k8s已有近一年的时间,版本从1.2到1.5.1.6.1.7,期间出现并解决了不少问题,下面是我总结的影响k8s集群稳定性的因素: 1. 安装环境 *kubelet版本最好与kube-apiser ...

  3. #20175204 张湲祯 2018-2019-2《Java程序设计》第五周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第五周学习总结 教材学习内容总结 -第六章接口与实现要点: -接口: 1.使用关键字interface定义接口. 2.接 ...

  4. C#学习笔记——MDI窗体(多文档界面)

    1.设置父窗体: 如果要将某个窗体设置为父窗体,只需将该窗体的IsMdiContainer属性设置为True即可. 2.设置子窗体: 通过设为某个窗体的MdiParent属性来确定该窗体是那个窗体的子 ...

  5. 资产信息之收集资产代码流程,API的一个认证,数据库表的设计

    收集资产代码流程 1.起初我们些的代码是面条式的一堆的逻辑判断.   后来通过了不断的优化升级实现了一个3种方案都支持的CMDB系统,我们用哪种方案只需要在配置文件里修改一下设置就行了.   同时我们 ...

  6. 开源智能英文单词提取翻译工具(C#)

    WordsTool 这个工具用于分析文本文件中所有的英语单词 并且通过内置字典数据库工具对这些单词进行解析 可以生成表格形式 并且支持导出到excel文件中 用于学习单词 本代码禁止商业用途 如需要商 ...

  7. python学习第34天

    # 互斥锁# 进程之间的数据共享 # 关于数据安全的问题# 进程池(自己了解,后面线程部分还会讲) # from multiprocessing import Pool# 线程的概念 (面试的重点)# ...

  8. 【python系列】--Python变量和数据类型

    python数据类型 一.整数 Python可以处理任意大小的整数,当然包括负整数,在Python程序中,整数的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等. 计算机由于使用 ...

  9. java内部类:成员内部类,静态内部类方法内部类,匿名内部类(A)

    package cn.kecheng; /** * 在java中,一个文件可以定义多个类,文件名必须和public 类型的类的类名保持一致.这两个类是平行关系. * 在java中,一个类也可以定义在一 ...

  10. Java后端学习,推荐书籍和学习路线

    最近在学习Java和全栈开发,推荐一些有用的书籍 书架主要针对Java后端和全栈开发用的 书籍介绍 <Spring Boot 2.0企业级应用开发实战> 本书深入浅岀地讲解了 Spring ...