您的位置:首页 > 编程语言 > C#

备忘录:关于C#生成商品条码

2022-02-15 22:21 1986 查看

目录

志铭-2022年2月15日 22:15:46

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,//图片空白边距
Pur
564
eBarcode = 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. 使用字体

  • 关于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
    1f91
    :
    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

  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: