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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

一、条形码

一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的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
/// <summary>
/// 二维码助手类
/// </summary>
public  class  QRCodeOp
{
     /// <summary>
     /// 生成二维码
     /// </summary>
     /// <param name="qrCodeContent">要编码的内容</param>
     /// <returns>返回二维码位图</returns>
     public  static  Bitmap QRCodeEncoderUtil( string  qrCodeContent)
     {
         QRCodeEncoder qrCodeEncoder =  new  QRCodeEncoder();
         qrCodeEncoder.QRCodeVersion = 0;
         Bitmap img = qrCodeEncoder.Encode(qrCodeContent, Encoding.UTF8); //指定utf-8编码, 支持中文
         return  img;
     }
                
     /// <summary>
     /// 解析二维码
     /// </summary>
     /// <param name="bitmap">要解析的二维码位图</param>
     /// <returns>解析后的字符串</returns>
     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

相关文章
|
小程序
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
微信小程序 - 二维码数据解析,如何扫码进入开发版测试二维码数据
388 0
|
1月前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
93 12
|
2月前
|
JSON 开发框架 JavaScript
【Azure Developer】使用.Net Core解析JSON的笔记
【Azure Developer】使用.Net Core解析JSON的笔记
|
2月前
|
开发框架 .NET Linux
2款高效的.NET二维码生成类库
2款高效的.NET二维码生成类库
|
2月前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
81 0
|
2月前
【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
|
12月前
|
Kubernetes 安全 数据安全/隐私保护
【K8S系列】深入解析k8s网络插件—Weave Net
【K8S系列】深入解析k8s网络插件—Weave Net
910 0
|
5月前
|
Java API Spring
开源!一款基于Spring Boot的二维码生成和解析工具
开源!一款基于Spring Boot的二维码生成和解析工具
76 1
|
5月前
|
JavaScript
js生成二维码和解析二维码
js生成二维码和解析二维码
79 0
|
5月前
|
JSON 缓存 小程序
.NET生成微信小程序推广二维码
.NET生成微信小程序推广二维码

推荐镜像

更多