备忘录——关于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 之 爬虫:正则表达式
python中正则表达式功能由 re 模块提供: import re 两个主要函数: match 匹配第一个字符(从第一个字符开始匹配) search 匹配整个字符串 一.匹配单个字符 1.匹配某个 ...
- SYCOJ4972的幂次方
题目- 2的幂次方 (shiyancang.cn) 递归题 #include<bits/stdc++.h> using namespace std; int k; void f(int n ...
- Java 中如何实现线程间通信
世界以痛吻我,要我报之以歌 -- 泰戈尔<飞鸟集> 虽然通常每个子线程只需要完成自己的任务,但是有时我们希望多个线程一起工作来完成一个任务,这就涉及到线程间通信. 关于线程间通信本文涉及到 ...
- 开源数据可视化BI工具SuperSet(使用)
上一篇介绍了Linux 下如何安装SuperSet ,本篇简单介绍一下如何使用 1.输入安装时设置的用户名密码登录控制台 2.控制界面如下 3.第一步添加数据源(已安装好的mysql) 点击 da ...
- 《剑指offer》面试题06. 从尾到头打印链表
问题描述 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 限制: 0 <= 链表长度 <= 10 ...
- 【刷题-LeetCode】306. Additive Number
Additive Number Additive number is a string whose digits can form additive sequence. A valid additiv ...
- 【刷题-LeetCode】190 Reverse Bits
Reverse Bits Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 0000001010010100000 ...
- gin框架中请求路由组的使用
1. gin框架中可以使用路由组来实现对路由的分类 package main import "github.com/gin-gonic/gin" func main() { rou ...
- AOP操作-准备工作
AOP操作(准备) 1,Spring 框架中一般基于 AspectJ 实现AOP操作 (1)什么是 AspectJ *AspectJ 不是 Spring 组成部分,独立AOP框架,一般把 Aspect ...
- Python3 生成激活码
1.文档: string模块:https://docs.python.org/3/library/string.html random模块:https://docs.python.org/3/libr ...