BarQode:C# 条码二维码生成库 【开源推荐】一个库搞定 19 种条码/二维码BarQodeC# 条码生成库零售系统要打 EAN-13、仓储物流要 ITF 带外框、医药邮政要 Pharmacode / IMB 四态条码、电子凭证要 QR / DataMatrix、物流单号要 MaxiCode 六边形……一个项目里混搭好几种码制怎么破今天介绍一个库覆盖 19 种主流码制的开源项目 ——BarQode。一、BarQode 是什么BarQode是一个用 C# 编写、多目标框架支持的条码 / 二维码生成库零第三方依赖同时输出SVG和PNG两种格式。一句话总结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物流、GS1Code 39 / 93Code39Encoder/Code93Encoder工业控制、资产标签EAN-13 / EAN-8Ean13Encoder/Ean8Encoder零售商品带护条UPC-A / UPC-EUpcAEncoder/UpcEEncoder北美零售带护条ITFItfEncoder仓储物流带外框CodaBarCodaBarEncoder图书馆、血库MSIMsiEncoder超市货架PlesseyPlesseyEncoder老式零售PharmacodePharmacodeEncoder医药包装RSS-14Rss14EncoderGS1 DataBarIMBImbEncoder美国邮政四态条码四、3 分钟快速上手安装dotnetaddpackage BarQode一行生成 QR 码usingBarQode;usingBarQode.Encoders;usingBarQode.Rendering;usingSystem.IO;varencodernewQrCodeEncoder(newQrCodeOptions());// SVG纯文本无任何依赖stringsvgBarcodeRenderer.RenderSvg(encoder,https://gitee.com,null);File.WriteAllText(qrcode.svg,svg);// PNG图片字节byte[]pngBarcodeRenderer.RenderPng(encoder,https://gitee.com,null);File.WriteAllBytes(qrcode.png,png);就这两步建编码器 → 调BarcodeRenderer。不管是 QR 还是 EAN-13、ITF、MaxiCodeAPI 长一个样。五、实战示例6 种典型场景1. QR 码中文 高容错varoptsnewQrCodeOptions{ErrorLevelQrCodeErrorCorrectionLevel.H,// 30% 容错CharacterSetUTF-8,// 支持中文Width320,Height320,Margin4,TextPositionTextPosition.Bottom};varencodernewQrCodeEncoder(opts);byte[]pngBarcodeRenderer.RenderPng(encoder,中文 QR 测试,opts);2. EAN-13带护条 文本分段零售商品条码护条自动加高、文本按护条区段自动分三段居中——完全符合标准。varencodernewEan13Encoder();encoder.Options.GuardBarExtraHeight25;encoder.Options.Height140;encoder.Options.TextPositionTextPosition.Bottom;byte[]pngBarcodeRenderer.RenderPng(encoder,5901234123457,encoder.Options);3. ITF带外框仓储物流标配ITF 标准要求外框BarQode 默认就给你画好4 条填充矩形上下紧贴条码。varencodernewItfEncoder();encoder.Options.ShowBordertrue;encoder.Options.BorderWidth6;encoder.Options.Height120;byte[]pngBarcodeRenderer.RenderPng(encoder,1234567890,encoder.Options);4. IMB四态条码美国邮政智能邮件条码Full / Ascender / Descender / Tracker 四种高度自动编码。varencodernewImbEncoder();encoder.Options.FourStatetrue;encoder.Options.Height120;byte[]pngBarcodeRenderer.RenderPng(encoder,01234567094987654321,encoder.Options);5. MaxiCode六边形 牛眼UPS 物流码标准六边形模块 中央同心圆牛眼。BarQode 先画牛眼背景层再画六边形前景层避免牛眼白环遮挡数据。varencodernewMaxiCodeEncoder();encoder.Options.ModeMaxiCodeMode.Mode4;encoder.Options.Hexagonaltrue;encoder.Options.Width320;encoder.Options.Height320;byte[]pngBarcodeRenderer.RenderPng(encoder,Hello MaxiCode!,encoder.Options);6. Code128 GS1带 GS1 应用标识符的物流码(01)这种括号语法自动解析。varencodernewCode128Encoder();encoder.Options.CompactEncodingtrue;encoder.Options.GS1Formattrue;encoder.Options.Height120;encoder.Options.TextPositionTextPosition.Bottom;stringsvgBarcodeRenderer.RenderSvg(encoder,(01)12345678901231,encoder.Options);六、框架兼容性从 .NET 4.0 到 9.0 全覆盖这是 BarQode 的一个亮点——真的支持 .NET Framework 4.0。老项目不用升级框架也能用。框架PNG 支持说明net40/net45/net461/net48✅.NET Framework 自带 GDInetstandard2.0✅System.Drawing.Common8.0net6.0/net7.0✅System.Drawing.Common8.0net8.0/net9.0✅System.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/UPCint[]GetGuardBarIndices();TextSegmentLayout[]GetTextSegments(stringdata);}调用方完全不用关心码制差异——传编码器、传数据、传选项剩下的BarcodeRenderer搞定。八、踩过的坑技术干货开发过程中踩了不少标准里的暗坑挑几个有意思的DataMatrix 的本原多项式用的是0x12Dx⁸x⁵x³x²1不是QR 码的0x11D。用错多项式RS 编码自洽性检查能过但真实扫描器全拒——这个 bug 找了好久。QR 版本信息位序V7 的版本信息必须 LSB-first 存放。如果按 MSB-first所有 V7 二维码都扫不出来。DataMatrix 253 状态填充必须用条件减法不能用取模。(value pseudoRandom) % (maxVal1)在和等于 maxVal1 时会错算成 0应为 1。MaxiCode 牛眼遮挡六边形和牛眼有重叠区域必须先画牛眼再画六边形否则牛眼的白环会把数据六边形挖空。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三连是对开源作者最大的鼓励我们下篇见