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. hdu5974 A Simple Math Problem(数学)

    题目链接 大意:给你两个数X,YX,YX,Y,让你找两个数a,ba,ba,b,满足a+b=X,lcm(a,b)=Ya+b=X,lcm(a,b)=Ya+b=X,lcm(a,b)=Y. 思路:枚举gcd( ...

  2. Java多线程访问共享资源类及类之间关系设计

    1.涉及的类 多线程类.共享资源存储类 2.类之间的关系 (1)共享资源存储类作为线程类的全局成员变量,在线程初始化时,通过setter或者构造注入(当然此处是同一个共享资源类对象),实现多个线程共享 ...

  3. 解决MySQL Access denied for user 'root'@'IP地址' 问题

    1.mysql -u root -p 登陆进MYSQL: 2.执行以下命令: GRANT ALL PRIVILEGES ON *.* TO 'your name'@'%' IDENTIFIED BY ...

  4. 第三周四则运算辅助(CAI)结对项目需求文档

    小学四则运算辅助(CAI) UI需求: 目的:让更对的小学生能学到更多的知识,提高做题的效率. 背景:该系统应用于小学生数学算术题的出题,判断对错以及错题本,该系统为解决家长每天为孩子出题的不便而解决 ...

  5. 开发一个项目之npm

    npm (nodejs平台上写的js模块的管理工具  下载.互相依赖等) npm install 本地项目的node_modules文件夹  , -g  npm config prefix 目录eg: ...

  6. IIS7二级域名添加同一证书

    IIS7二级域名添加同一证书, 先绑定第一个域名到443 ,之后的用以下命令行绑定 cd C:\Windows\System32\Inetsrv\appcmd set site /site.name: ...

  7. 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)

    题目链接:https://ac.nowcoder.com/acm/contest/874/D 题目大意:给你两个数列a和b然后对a可以进行排列,对b可以任意排列,问你sigma(a(i)*b(i))的 ...

  8. 微信小程序开发01 --- 微信小程序项目结构介绍

    一.微信小程序简单介绍: 微信官方介绍微信小程序是一个不需要下载安装就可使用(呵呵,JS代码不用下载吗?展示的UI不用下载吗?)的应用,它实现了应用“触手可及”的梦想,用户扫一扫或搜一下即可打开应用. ...

  9. python3解决 json.dumps中文乱码

    使用json.dumps()运行结果如下 role_name字段中文乱码了 只需要使用ensure_ascii=False 运行结果如下:

  10. python numpy和pandas做数据分析时去掉科学记数法显示

    1.Numpy import numpy as np np.set_printoptions(suppress=True, threshold=np.nan) suppress=True 取消科学记数 ...