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

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

一、条形码

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

时间: 2024-12-28 05:29:46

asp.net 生成、解析条形码和二维码的相关文章

asp.net中怎么实现扫描二维码可以查看另外一个表单中的详细信息

问题描述 asp.net中怎么实现扫描二维码可以查看另外一个表单中的详细信息 就是在二维码生成的时候如果把另外一个表单中的内容给穿进去,就好像跳转页面似得,只不过变成扫描才能查看信息 解决方案 你的扫描是用户手机扫描还是什么?用户手机扫描你要自己弄个app给用户用,附带二维码扫描功能,二维码存储一个guid,app扫描得到二维码后回发服务器存储,客户端这个二维码页面用计时器和ajax不断轮训服务器获取对应的guid,存在了就控制页面跳转到信息页面或者ajax返回相关信息显示出来

微信 开发生成带参数的二维码的实例_php技巧

微信开发生成带参数的二维码的讲解 在微信公众号平台开发者那里,在"账号管理"那里,有一项功能是"生成带参数的二维码",通过这儿生成的二维码,只要通过微信扫一扫之后,会把事件自动推送到微信公众号上 用微信扫一扫推送到开发者网址那儿的数据如下: <xml><ToUserName><![CDATA[gh_452****b0f2]]></ToUserName> <FromUserName><![CDATA[o

Java生成中间logo的二维码(还可以加上二维码名称哦)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 最近有负责微信开发,对于微信开发的项目,肯定少不了二维码啦,正好有个这样的需求,这对不同的商品生成一个二维码,扫码即刻下单.博主就弄了一个二维码生成的工具类. 弄出来之后,产品经理又说了,中间放上公司的logo是不是好一点?加上吧, 加上公司logo之后,产品经理想了想,每个商品都有个二维码,销售人员有很多个商品二维码,群发给用户,在qq群上,微信群上,怎么知道哪个二维码对应哪个商品的呢?于

二维码解析时如果二维码图片超过7K就不能解析

问题描述 二维码解析时如果二维码图片超过7K就不能解析 利用ThoughtWorks.QRCode解析二维码时,会出现一个问题. 1.如果要解析的二维码图片大小超过7KB就不能解析 解决方案 用zxing吧,从来没任何问题.

微信高级接口生成的带参数二维码中间加logo

问题描述 微信高级接口生成的带参数二维码中间加logo.1.怎么在生成的带参数的二维码加logo,哪怕是账号默认的二维码,但这个二维码一定要是微信生的的带logo的,不需要得到微信生成的二维码再去处理加上的logo,类似加水印或者遮盖的.

RFID安防应用无处不在 或将代替条形码和二维码

RFID是一种无线射频识别技术,手持式读写器,它是自动识别技术的一种.从概念上来讲,RFID类似于条码扫描,对于条码技术而言,它是将已编码的条形码附着于目标物并使用专用的扫描读写器利用光信号将信息由条形磁传送到扫描读写器;而RFID则使用专用的RFID读写器及专门的可附着于目标物的RFID标签,利用频率信号将信息由RFID标签传送至RFID读写器.RFID应用无处不在,有研究称RFID技术或将代替条形码和二维码,领衔电子标签发展潮流. RFID技术或将代替条形码和二维码 根据国家物联网二维码公共

Thinkphp3.2.3整合phpqrcode生成带logo的二维码_php技巧

Thinkphp中没有二维码相关的库,因此我们可以通过整合phpqrcode来完成生成二维码的功能. 下载phpqrcode 下载地址:http://phpqrcode.sourceforge.net/ 整合到Thinkphp框架 在"ThinkPHP\Library\Vendor\"下新建目录phpqrcode,将压缩包内容解压到该文件夹下. 调用phpqrcode生成二维码 在IndexController控制器下添加如下方法: public function qrcode($ur

RFID技术或将代替条形码和二维码

RFID是一种无线射频识别技术,手持式读写器,它是自动识别技术的一种.从概念上来讲,RFID类似于条码扫描,对于条码技术而言,它是将已编码的条形码附着于目标物并使用专用的扫描读写器利用光信号将信息由条形磁传送到扫描读写器;而RFID则使用专用的RFID读写器及专门的可附着于目标物的RFID标签,利用频率信号将信息由RFID标签传送至RFID读写器.RFID应用无处不在,有研究称RFID技术或将代替条形码和二维码,领衔电子标签发展潮流. RFID技术或将代替条形码和二维码 根据国家物联网二维码公共

微信接口开发之高级篇系列【用户分组接口和生成带参数的二维码】

<?php /** * Created by PhpStorm. * User: Tinywan * Date: 2016/9/11 * Time: 10:00 */ namespace Home\Controller; use Org\Util\WechatAuth; use Think\Controller; class UserController extends Controller { private $appid; private $appSecret; private $Wecha