news 2026/7/9 18:15:34

BarQode:C# 条码二维码生成库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
BarQode:C# 条码二维码生成库

【开源推荐】一个库搞定 19 种条码/二维码!BarQode:C# 条码生成库

零售系统要打 EAN-13、仓储物流要 ITF 带外框、医药邮政要 Pharmacode / IMB 四态条码、电子凭证要 QR / DataMatrix、物流单号要 MaxiCode 六边形……一个项目里混搭好几种码制,怎么破?今天介绍一个库覆盖 19 种主流码制的开源项目 ——BarQode


一、BarQode 是什么?

BarQode是一个用 C# 编写、多目标框架支持的条码 / 二维码生成库,零第三方依赖,同时输出SVGPNG两种格式。

一句话总结:19 种码制,9 个目标框架,2 种输出格式,0 个第三方依赖。


二、核心特性

  • 🧰19 种码制:一维 + 二维全覆盖,零售/物流/医药/邮政/GS1 场景通吃
  • 🖥️9 个目标框架.NET Framework 4.0/4.5/4.6.1/4.8.NET Standard 2.0.NET 6/7/8/9
  • 🎨双渲染输出:SVG(纯文本,全平台)+ PNG(依赖System.Drawing
  • 🪶零第三方依赖:核心编码完全独立,PNG 渲染才需System.Drawing.Common
  • 🔌统一 API:所有编码器实现IBarcodeEncoderBarcodeRenderer一个静态类搞定全部调度
  • 🛡️完整纠错:内置 Reed-Solomon 实现,QR / Aztec / DataMatrix / PDF417 / MaxiCode 纠错等级可配
  • 🧩特殊渲染:EAN/UPC 护条、ITF 外框、IMB 四态条、MaxiCode 六边形模块,全部按标准实现

三、支持的 19 种码制

二维码(2D)

码制编码器典型场景
QR CodeQrCodeEncoder支付、电子凭证、网址
AztecAztecEncoder交通票据、电子票
DataMatrixDatamatrixEncoder电子元器件、医药包装
PDF417Pdf417Encoder身份证、物流标签(大容量)
MaxiCodeMaxiCodeEncoderUPS 物流(六边形 + 牛眼)

一维码(1D)

码制编码器典型场景
Code 128Code128Encoder物流、GS1
Code 39 / 93Code39Encoder/Code93Encoder工业控制、资产标签
EAN-13 / EAN-8Ean13Encoder/Ean8Encoder零售商品(带护条)
UPC-A / UPC-EUpcAEncoder/UpcEEncoder北美零售(带护条)
ITFItfEncoder仓储物流(带外框)
CodaBarCodaBarEncoder图书馆、血库
MSIMsiEncoder超市货架
PlesseyPlesseyEncoder老式零售
PharmacodePharmacodeEncoder医药包装
RSS-14Rss14EncoderGS1 DataBar
IMBImbEncoder美国邮政(四态条码)

四、3 分钟快速上手

安装

dotnetaddpackage BarQode

一行生成 QR 码

usingBarQode;usingBarQode.Encoders;usingBarQode.Rendering;usingSystem.IO;varencoder=newQrCodeEncoder(newQrCodeOptions());// SVG:纯文本,无任何依赖stringsvg=BarcodeRenderer.RenderSvg(encoder,"https://gitee.com",null);File.WriteAllText("qrcode.svg",svg);// PNG:图片字节byte[]png=BarcodeRenderer.RenderPng(encoder,"https://gitee.com",null);File.WriteAllBytes("qrcode.png",png);

就这两步:建编码器 → 调BarcodeRenderer。不管是 QR 还是 EAN-13、ITF、MaxiCode,API 长一个样。


五、实战示例:6 种典型场景

1. QR 码(中文 + 高容错)

varopts=newQrCodeOptions{ErrorLevel=QrCodeErrorCorrectionLevel.H,// 30% 容错CharacterSet="UTF-8",// 支持中文Width=320,Height=320,Margin=4,TextPosition=TextPosition.Bottom};varencoder=newQrCodeEncoder(opts);byte[]png=BarcodeRenderer.RenderPng(encoder,"中文 QR 测试",opts);

2. EAN-13(带护条 + 文本分段)

零售商品条码,护条自动加高、文本按护条区段自动分三段居中——完全符合标准。

varencoder=newEan13Encoder();encoder.Options.GuardBarExtraHeight=25;encoder.Options.Height=140;encoder.Options.TextPosition=TextPosition.Bottom;byte[]png=BarcodeRenderer.RenderPng(encoder,"5901234123457",encoder.Options);

3. ITF(带外框)

仓储物流标配,ITF 标准要求外框,BarQode 默认就给你画好(4 条填充矩形,上下紧贴条码)。

varencoder=newItfEncoder();encoder.Options.ShowBorder=true;encoder.Options.BorderWidth=6;encoder.Options.Height=120;byte[]png=BarcodeRenderer.RenderPng(encoder,"1234567890",encoder.Options);

4. IMB(四态条码)

美国邮政智能邮件条码,Full / Ascender / Descender / Tracker 四种高度自动编码。

varencoder=newImbEncoder();encoder.Options.FourState=true;encoder.Options.Height=120;byte[]png=BarcodeRenderer.RenderPng(encoder,"01234567094987654321",encoder.Options);

5. MaxiCode(六边形 + 牛眼)

UPS 物流码,标准六边形模块 + 中央同心圆牛眼。BarQode 先画牛眼(背景层)再画六边形(前景层),避免牛眼白环遮挡数据。

varencoder=newMaxiCodeEncoder();encoder.Options.Mode=MaxiCodeMode.Mode4;encoder.Options.Hexagonal=true;encoder.Options.Width=320;encoder.Options.Height=320;byte[]png=BarcodeRenderer.RenderPng(encoder,"Hello MaxiCode!",encoder.Options);

6. Code128 + GS1

带 GS1 应用标识符的物流码,(01)这种括号语法自动解析。

varencoder=newCode128Encoder();encoder.Options.CompactEncoding=true;encoder.Options.GS1Format=true;encoder.Options.Height=120;encoder.Options.TextPosition=TextPosition.Bottom;stringsvg=BarcodeRenderer.RenderSvg(encoder,"(01)12345678901231",encoder.Options);

六、框架兼容性:从 .NET 4.0 到 9.0 全覆盖

这是 BarQode 的一个亮点——真的支持 .NET Framework 4.0。老项目不用升级框架也能用。

框架PNG 支持说明
net40/net45/net461/net48.NET Framework 自带 GDI+
netstandard2.0System.Drawing.Common8.0
net6.0/net7.0System.Drawing.Common8.0
net8.0/net9.0System.Drawing.Common9.0

⚠️ Linux/macOS 用 PNG 渲染需装libgdiplus;只输出 SVG 则无此限制。

为了兼容 net40,库内做了不少工程处理:禁用隐式 using、禁用可空引用类型、nameof全部替换为字符串字面量、属性用显式 getter、特性在构造函数中赋值。细节拉满。


七、架构设计:统一 API 的秘密

所有编码器实现统一接口,BarcodeRenderer自动判断 1D / 2D 并分派:

Encoder.Encode1D / Encode2D → 原始编码结果(int[] / BarcodeMatrix) │ ▼ BarcodeRenderer.RenderSvg / RenderPng(encoder, data, options) │ 内部:ApplyEncoderMetadata(自动填护条索引 / 文本分段 / PureBarcode 同步) ▼ SvgRenderer / PngRenderer → SVG 字符串 / PNG byte[]

接口层级:

publicinterfaceIBarcodeEncoder{// 根接口objectEncode(stringdata);stringBarcodeType{get;}}publicinterfaceI1DBarcodeEncoder:IBarcodeEncoder{// 一维码int[]Encode1D(stringdata);}publicinterfaceI2DBarcodeEncoder:IBarcodeEncoder{// 二维码BarcodeMatrixEncode2D(stringdata);}publicinterfaceIGuardBarEncoder{// 带护条(EAN/UPC)int[]GetGuardBarIndices();TextSegmentLayout[]GetTextSegments(stringdata);}

调用方完全不用关心码制差异——传编码器、传数据、传选项,剩下的BarcodeRenderer搞定。


八、踩过的坑(技术干货)

开发过程中踩了不少标准里的暗坑,挑几个有意思的:

  1. DataMatrix 的本原多项式:用的是0x12D(x⁸+x⁵+x³+x²+1),不是QR 码的0x11D。用错多项式,RS 编码自洽性检查能过,但真实扫描器全拒——这个 bug 找了好久。
  2. QR 版本信息位序:V7+ 的版本信息必须 LSB-first 存放。如果按 MSB-first,所有 V7+ 二维码都扫不出来。
  3. DataMatrix 253 状态填充:必须用条件减法,不能用取模。(value + pseudoRandom) % (maxVal+1)在和等于 maxVal+1 时会错算成 0(应为 1)。
  4. MaxiCode 牛眼遮挡:六边形和牛眼有重叠区域,必须先画牛眼再画六边形,否则牛眼的白环会把数据六边形挖空。
  5. EAN/UPC 文本分段:文本不是一整串居中,而是按护条分隔的三个区段分别居中,这是扫描器和人眼对齐的关键。

完整的踩坑记录和工程约定都在项目的project_memory.md里,感兴趣的可以去源码仓库翻。


九、项目地址

链接
NuGetdotnet add package BarQode
项目地址https://gitee.com/li_qi_lang/BarQode
许可证Apache License 2.0

如果这个库对你有帮助,欢迎Star ⭐支持!也欢迎提 Issue、PR 一起完善。


十、总结

BarQode 适合谁?

  • 需要在 C# 项目里生成多种条码/二维码的开发者
  • 老项目(.NET Framework 4.0+)想直接引用、不想升级框架
  • 对第三方依赖敏感、想要零依赖的纯净库
  • 需要标准合规的护条、外框、四态、六边形等特殊渲染

19 种码制、9 个框架、2 种输出、0 依赖——一个库搞定条码生成,这就是 BarQode。


📌如果你也在做条码/二维码相关的项目,欢迎留言交流使用场景,作者会持续维护这个库。

觉得有用的话,点个赞 + 收藏 + Star三连,是对开源作者最大的鼓励!我们下篇见 👋

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 18:14:25

Cursor Pro功能解锁指南:三步破解限制与设备身份管理技术

Cursor Pro功能解锁指南:三步破解限制与设备身份管理技术 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your …

作者头像 李华
网站建设 2026/7/9 18:13:36

3种主流图片占位服务对比:Picsum vs. Unsplash Source vs. Placeholder.com

3种主流图片占位服务深度评测:技术选型指南在当今快速迭代的互联网产品开发中,图片占位服务已成为开发者工具箱中不可或缺的一部分。无论是前端原型设计、后端接口测试,还是产品演示,高质量的占位图片服务都能显著提升开发效率。本…

作者头像 李华
网站建设 2026/7/9 18:08:29

STM32F103 + A7680C 4G模块:3步AT指令连接TCP服务器(附完整工程)

STM32F103与A7680C 4G模块实战:工业级TCP通信解决方案1. 项目背景与硬件选型在工业物联网和远程监控领域,稳定可靠的无线通信是实现设备互联的关键。STM32F103作为经典Cortex-M3内核MCU,与A7680C CAT1 4G模块的组合,为中小数据量传…

作者头像 李华
网站建设 2026/7/9 18:07:13

UEFI vs Legacy BIOS 深度对比:从GPT分区到安全启动的5个关键差异解析

UEFI与Legacy BIOS技术解析:从启动机制到安全架构的全面演进在计算机启动的瞬间,当屏幕尚未亮起而主板指示灯开始闪烁时,一套精密的固件程序已经开始在硬件底层悄然运行。这个被称为"计算机启动第一行代码"的系统,经历了…

作者头像 李华
网站建设 2026/7/9 18:05:52

怎样进行桥梁防撞预警系统的云边端架构的运行监控?

桥梁防撞预警系统的云边端架构运行监控,核心目标不是单纯统计设备在线率,而是围绕 “防撞预警功能持续可用” 这一安全底线,构建覆盖端 - 边 - 云全层级、兼顾在线 / 离线双模式、可定位、可追溯、可联动的监控体系。 与普通物联网系统监控相…

作者头像 李华