备忘录——关于C#生成条形码
0. 背景说明
在.net程序中生成69码的条形码很容易
生成的条形码使用手机扫码和扫码枪都是可以准确的扫描
但是,这次我需要生成69码的条形码
可是我发现,我生成的69码对应的条形码和超市商品的打印的不一样,
一般商品上的69码的条形码两边的和中间的线条都会长出一段的
之前程序中的生成的条形码都是仓库和内部使用不需要在意这些细节,
而这次打印的吊牌需要直接展示给用户,所以需要注意一些细节
一般搜索.net创建条形码都是使用Zxing,但是达不到我所期望
最终发现使用字体实现效果极好,而且使用字体在报表中展示时无需要使用图片,直接使用文字即可
测试了三种方法,将三种方法记录于此

1. 使用ZXing.NET
PM>Install-Package ZXing.Net -Version 0.16.8
using ZXing;
using ZXing.Common;
/// <summary>
/// 使用ZXing创建条形码
/// </summary>
/// <param name="barCode">条码</param>
/// <param name="height">高度</param>
/// <param name="width">宽度</param>
/// <returns>Bitmap图片</returns>
public static Bitmap GenerateBarCodeByZXing(string barCode,string height=310,string width=120)
{
EncodingOptions encoding = new EncodingOptions()
{
GS1Format = true,
Height = height,//设置一维码宽高
Width = widht,
Margin = 0,//图片空白边距
PureBarcode = false//在条码下显示条码,true则不显示
};
//生成条形码的图片
BarcodeWriter wr = new BarcodeWriter()
{
//进行指定规格
Options = encoding,
Format = BarcodeFormat.EAN_13 // BarcodeFormat.CODE_128//
};
Bitmap img = wr.Write(barCode);//生成一维码图片
return img;
}
2. 使用BarcodeLib
PM>Install-Package BarcodeLib -Version 2.4.0
using BarcodeLib;
/// <summary>
/// 使用BarcodeLib生成条形码
/// </summary>
/// <param name="barCode">内容</param>
/// <returns></returns>
public static Image GenerateBarCodeByBarcodeLib(string barCode)
{
Barcode barcode = new Barcode()
{
IncludeLabel = true,//是否包含图片下面的文字信息
Alignment = AlignmentPositions.CENTER,//一维码在图片居中
Width = 250,
Height = 100,
RotateFlipType = RotateFlipType.RotateNoneFlipNone,//图像反转
BackColor = Color.White,//背景色
ForeColor = Color.Black,//前景色
};
return barcode.Encode(TYPE.EAN13, barCode);
}
3. 使用字体
这是参考一个YouTube Up主的方法,视频连接见参考链接
首先在程序安装的机器上安装:ean13.ttf字体
关于69码原理
internal class EAN13Class
{
public static string Barcode13Digits = "";
/// <summary>
/// 12位条码补齐校验位生成13位的条码
/// </summary>
/// <param name="chaine"></param>
/// <returns></returns>
public static string EAN13(string chaine)
{
int i;
int first;
int checkSum = 0;
string Barcode = "";
bool tableA;
if (Regex.IsMatch(chaine, "^\\d{12}$"))
{
for (i = 1; i < 12; i += 2)
{
System.Diagnostics.Debug.WriteLine(chaine.Substring(i, 1));
checkSum += Convert.ToInt32(chaine.Substring(i, 1));
}
checkSum *= 3;
for (i = 0; i < 12; i += 2)
{
checkSum += Convert.ToInt32(chaine.Substring(i, 1));
}
chaine += (10 - checkSum % 10) % 10;
Barcode13Digits = chaine.ToString();
Barcode = chaine.Substring(0, 1) + (char)(65 + Convert.ToInt3(chaine.Substring(1, 1)));
first = Convert.ToInt32(chaine.Substring(0, 1));
for (i = 2; i <= 6; i++)
{
tableA = false;
switch (i)
{
case 2:
if (first >= 0 && first <= 3)
{
tableA = true;
}
break;
case 3:
if (first == 0 || first == 4 || first == 7 || first== 8)
{
tableA = true;
}
break;
case 4:
if (first == 0 || first == 1 || first == 4 || first== 5 || first == 9)
{
tableA = true;
}
break;
case 5:
if (first == 0 || first == 2 || first == 5 || first== 6 || first == 7)
{
tableA = true;
}
break;
case 6:
if (first == 0 || first == 3 || first == 6 || first== 8 || first == 9)
{
tableA = true;
}
break;
}
if (tableA)
{
Barcode += (char)(65 + Convert.ToInt32(chaine.Substrin(i, 1)));
}
else
{
Barcode += (char)(75 + Convert.ToInt32(chaine.Substrin(i, 1)));
}
}
Barcode += "*";
for (i = 7; i <= 12; i++)
{
Barcode += (char)(97 + Convert.ToInt32(chaine.Substring(i, 1));
}
Barcode += "+";
}
return Barcode;
}
}
string Check12Digits = txtForFont.Text.PadRight(12, '0');//不足12位用0总右侧补齐
string Barrcode = EAN13Class.EAN13(Check12Digits);
labForFont.Text = Barrcode;
4. 参考
C# Programming How to Create EAN-13 Barcode Generator
备忘录——关于C#生成条形码的更多相关文章
- C# 在Word文档中生成条形码
C# 在Word文档中生成条形码 简介 条形码是由多个不同的空白和黑条按照一定的顺序组成,用于表示各种信息如产品名称.制造商.类别.价格等.目前,条形码在我们的日常生活中有着很广泛的应用,不管是在图书 ...
- 使用html2canvas实现批量生成条形码
/*前台代码*/ <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Generat ...
- JAVA生成条形码
1.下载生成条形码所需要的jar包barcode4j.jar: 2.java生成条形码代码 import java.awt.image.BufferedImage;import java.io.Fil ...
- C# 生成条形码
原文地址:http://www.cnblogs.com/xcsn/p/4514759.html 引用BarcodeLib.dll(百度云中有)生成条形 protected void Button2_C ...
- C# 利用BarcodeLib.dll生成条形码(一维,zxing,QrCodeNet/dll二维码)
原文:http://blog.csdn.net/kongwei521/article/details/17588825 首先效果: 一.下载BarcodeLib.dll 下载地址 :http://do ...
- PHP5生成条形码器
前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...
- PHP生成条形码
前阵子在做一个商家优惠券的功能,需要用到条形码,于是将资料重新整理下. 1.什么是条形码? 百度百科定义:条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息 ...
- C# 利用BarcodeLib.dll生成条形码
首先效果: 1:首先下载BarcodeLib.dll 下载地址 http://pan.baidu.com/share/link?shareid=2590968386&uk=2148890391 ...
- 使用PHP-Barcode轻松生成条形码(一)
最近由于工作需要,研究了一下PHP如何生成条形码.虽然二维码时下比较流行,但是条形码依然应用广泛,不可替代.园子里有很多讲利用PHP生成条形码的文章,基本上都是围绕Barcode Bakery的,它虽 ...
随机推荐
- python + web自动化,点击不生效,提示“selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element is not clickable at point (117, 674)”
前言: 在做web自动化时,遇到一个缩放了浏览器比例的操作,从100%缩小到80%,再进行点击的时候,弹出报错信息,无法点击 selenium.common.exceptions.ElementCli ...
- ubuntu 18.04 安装mongodb并设为开机自启动
导入包管理系统使用的公钥 sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB4 ...
- Source Insight 4安装图文教程(附链接)
Source Insight 4安装图文教程,附激活文件直链 下载链接:http://naturalporters.vicp.io/uploads/si4_kgen_unis.zip 直链没了,就用下 ...
- MongoDB-基础知识学习(一)
概述 最近mongodb在互联网的活跃度直线上升,并且我们公司也使用了mongoDB 3.6 作为生产重要的数据库,我们项目组要监控mongodb的op.log日志,在此整理以前学习的知识,为以后备份 ...
- 力扣 - 剑指 Offer 49. 丑数
题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...
- 一文搞清楚 DNS 的来龙去脉
目录 美国霸权 ICANN:互联网界的联合国 IP 地址分配 域名解析架构 分层架构: DNS 缓存: 根 DNS 服务器: 顶级 DNS 服务器(TLD): 权威 DNS 服务器: 本地 DNS: ...
- Julia语言介绍
官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...
- java实现excel表格导入数据库表
导入excel就是一个上传excel文件,然后获取excel文件数据,然后处理数据并插入到数据库的过程 一.上传excel 前端jsp页面,我的是index.jsp 在页面中我自己加入了一个下载上传文 ...
- deepin20体验
现在Ubuntu20吊打deepin20 100条街.撑了20天受不了deepin 优点 开机启动设置简单,即使不是应用商店的应用也很好 deepin仓库不用代理也很快.,而且有些Ubuntu下载不了 ...
- 学习OAuth 2.0
认识OAuth 2.0 OAuth 2.0 是行业标准的授权协议. OAuth 2.0 专注于客户端开发人员的简单性,同时为 Web 应用程序.桌面应用程序.移动设备提供特定的授权流程. 应用场景 有 ...