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

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
简介: 一、条形码一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(International standard book number,国际标准书号)。

一、条形码

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

            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方式的代码:

            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";

最后上个效果图:


二、二维码

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

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

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

    /// <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;
        }
    }
使用上面两个方法,就可以生成和解析二维码。

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

        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的相关知识。

看下效果:


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

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

目录
相关文章
|
存储 .NET
asp.net 生成、解析条形码和二维码
原文 asp.net 生成、解析条形码和二维码 一、条形码 一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(International standard book number,国际标准书号)。
1317 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
114 0
|
2月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
44 0
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
170 5
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
|
11月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
139 0
|
12月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
138 0
|
12月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
[回馈]ASP.NET Core MVC开发实战之商城系统(开篇)
165 0
|
12月前
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
145 0
|
12月前
|
开发框架 前端开发 .NET
ASP.NET Core MVC 从入门到精通之自动映射(二)
ASP.NET Core MVC 从入门到精通之自动映射(二)
78 0