asp.net 生成、解析条形码和二维码

简介:

一、条形码

一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(International standard book number,国际标准书号)。编码方式也很多,比如Code39和Code128等等,这里选用了code128代码,摘自于互联网,稍加修改(比如文字置于条码的中间位置)。读者可以直接拷贝自项目中使用,这里简单演示一下,以Code128为例。

1
2
3
4
5
6
Code128 code =  new  Code128();
code.ValueFont =  new  Font( "Arial" , 7); //声明条码下方的字体
Bitmap bitMap = code.GetCodeImage(tf6_PERSONIDNUM.Text.Trim(), Code128.Encode.Code128A); //通过对文本框的文件进行Code128编码获得位图
string  fileName = Server.MapPath( "~" ) +  "Images\\QRImages\\"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ; //获取图片路径
bitMap.Save(fileName, ImageFormat.Jpeg); //保存图片
this .QRCodeImage.ImageUrl =  "~/Images/QRImages/"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ; //图片控件显示

Code39的类使用方法类似。由于Code39编码使用较为广泛,网上也有很多封装好的dll可直接使用,比如BarCode,直接引用dll即可。

引用BarCode方式的代码:

1
2
3
4
5
6
7
8
9
10
11
BarcodeControl barcode =  new  BarcodeControl();
barcode.BarcodeType = BarcodeType.CODE128C;
barcode.CopyRight =  "" // 空字符串就会不显示标题;
barcode.Data = tf6_PERSONIDNUM.Text.Trim();
                    
MemoryStream stream =  new  MemoryStream();
barcode.MakeImage(ImageFormat.Png, 1, 1,  true false null , stream);
Bitmap bitMap =  new  Bitmap(stream);
string  fileName = Server.MapPath( "~" ) +  "Images\\QRImages\\"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ;
bitMap.Save(fileName, ImageFormat.Jpeg);
this .QRCodeImage.ImageUrl =  "~/Images/QRImages/"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ;

最后上个效果图:

Center

二、二维码

二维码现在越来越流行,可以使用手机上或其它移动终端上的二维码扫描器软件对着二维码一扫,就可以得到相关信息。在互联网站上,可以找到很多二维码的工具,甚至还有不少在线生成、解析二维码的网站。在业务系统当中,比如档案管理系统中,以前一般都是通过条形码(一维码)来存储档案职工的基本信息,但是存储容量有限。而现在完全可以使用二维码存储更多容量的信息。

我们这里使用了ThoughtWorks.QRCode.dll这个类库,在asp.net项目中引用这个dll文件,就可以使用相关API进行开发。

比如,我们封装了一个最精简的类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
///
/// 二维码助手类
///
public  class  QRCodeOp
{
     ///
     /// 生成二维码
     ///
     ///
要编码的内容
     /// 返回二维码位图
     public  static  Bitmap QRCodeEncoderUtil( string  qrCodeContent)
     {
         QRCodeEncoder qrCodeEncoder =  new  QRCodeEncoder();
         qrCodeEncoder.QRCodeVersion = 0;
         Bitmap img = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8); //指定utf-8编码, 支持中文
         return  img;
     }
                
     ///
     /// 解析二维码
     ///
     ///
要解析的二维码位图
     /// 解析后的字符串
     public  static  string  QRCodeDecoderUtil(Bitmap bitmap)
     {
         QRCodeDecoder decoder =  new  QRCodeDecoder();
         string  decodedString = decoder.decode( new  QRCodeBitmapImage(bitmap), Encoding.UTF8); //指定utf-8编码, 支持中文
         return  decodedString;
     }
}

使用上面两个方法,就可以生成和解析二维码。

我们在程序中调用的时候,就可以这样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
protected  void  EncodeClick( object  sender, DirectEventArgs e)
{
     StringBuilder sb =  new  StringBuilder();
     sb.Append(tf6_PERSONIDNUM.Text.Trim() +  ";" ); //个人身份证号
     sb.Append(tf_DAID.Text.Trim() +  ";" );
     sb.Append(tf_DANAME.Text.Trim() +  ";" );
     sb.Append(cb_DABUSKIND.Text.Trim() +  ";" );
     sb.Append(cb_DAKIND.Text.Trim() +  ";" );
     sb.Append(cb_DALEVELCODE.Text.Trim() +  ";" );
     sb.Append(df_DABUILDTIME.Text.Trim() +  ";" );
     sb.Append(tf_DAORG.Text.Trim() +  ";" );
     sb.Append(cb_DASTATUS.Text.Trim() +  ";" );
     sb.Append(tf_DABUILDER.Text.Trim() +  ";" );
     sb.Append(tf_DABUILDORG.Text.Trim() +  ";" );
          
     Bitmap bitmap = QRCodeOp.QRCodeEncoderUtil((sb.ToString().Trim())); //调用二维码编码方法生成位图
     string  fileName = Server.MapPath( "~" ) +  "Images\\QRImages\\"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ;
     bitmap.Save(fileName); //保存位图,文件名为个人身份证号
     this .QRCodeImage.ImageUrl =  "~/Images/QRImages/"  + tf6_PERSONIDNUM.Text.Trim() +  ".jpg" ; //显示图片
     X.Msg.Alert( "二维码信息" , QRCodeOp.QRCodeDecoderUtil(bitmap)).Show(); //调用二维码解码方法弹出编码之前的信息
}

这里我在项目中用的是Ext.NET组件。X.Msg.Alert和QRCodeImage.ImageUrl以及DicrectEventArgs这些并不是很重要,感兴趣的读者可以去ext.net网站查阅ext.net的相关知识。


看下效果:

Center

点击按钮,我们把文本框中的信息(含数字、字母、中文、时间等),生成了二维码图片,并反过来进行了解析。

读者可以在此基础之上进一步封装扩展,与WCF等技术结合,提供一个二维码生成的web service。



本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1344188

相关文章
|
2月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
10月前
|
存储 算法 安全
.NET 平台 SM2 国密算法 License 证书生成深度解析
授权证书文件的后缀通常取决于其编码格式和具体用途。本文档通过一个示例程序展示了如何在 .NET 平台上使用国密 SM2 算法生成和验证许可证(License)文件。该示例不仅详细演示了 SM2 国密算法的实际应用场景,还提供了关于如何高效处理大规模许可证文件生成任务的技术参考。通过对不同并发策略的性能测试,开发者可以更好地理解如何优化许可证生成流程,以满足高并发和大数据量的需求。 希望这段描述更清晰地传达了程序的功能和技术亮点。
1115 14
.NET 平台 SM2 国密算法 License 证书生成深度解析
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
742 3
|
9月前
|
开发框架 .NET 中间件
.net8 使用 license 证书授权案例解析
本文介绍了如何使用 `.NET CLI` 创建并改造一个 `ASP.NET Core Web API` 项目,以实现基于许可证的授权机制。具体步骤包括创建项目、添加必要的 NuGet 包(如 `Standard.Licensing` 和 `Swashbuckle.AspNetCore`),以及修改 `Program.cs` 文件以集成自定义的许可证验证中间件。项目结构中新增了 `LicenseController` 接口用于处理授权相关操作,并通过测试流程验证了默认天气接口在未授权和授权状态下的响应情况。整个过程确保了应用程序能够在启动时正确验证许可证,保障系统的安全性与可控性。
428 8
.net8 使用 license 证书授权案例解析
|
测试技术 API 开发者
精通.NET单元测试:MSTest、xUnit、NUnit全面解析
【10月更文挑战第15天】本文介绍了.NET生态系统中最流行的三种单元测试框架:MSTest、xUnit和NUnit。通过示例代码展示了每种框架的基本用法和特点,帮助开发者根据项目需求和个人偏好选择合适的测试工具。
490 3
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
392 12
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:实现过程与关键细节解析an3.021-6232.com
随着互联网技术的快速发展,ASP.NET作为一种广泛使用的服务器端开发技术,其与数据库的交互操作成为了应用开发中的重要环节。本文将详细介绍在ASP.NET中如何连接SQL数据库,包括连接的基本概念、实现步骤、关键代码示例以及常见问题的解决方案。由于篇幅限制,本文不能保证达到完整的2000字,但会确保
|
JSON 开发框架 JavaScript
【Azure Developer】使用.Net Core解析JSON的笔记
【Azure Developer】使用.Net Core解析JSON的笔记
135 1
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
975 0
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
【Azure 应用服务】App Service 配置 Application Settings 访问Storage Account得到 could not be resolved: '*.file.core.windows.net'的报错。没有解析成对应中国区 Storage Account地址 *.file.core.chinacloudapi.cn
220 0

推荐镜像

更多
  • DNS