博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 生成、解析条形码和二维码
阅读量:6657 次
发布时间:2019-06-25

本文共 3707 字,大约阅读时间需要 12 分钟。

一、条形码

一维码,俗称条形码,广泛的用于电子工业等行业。比如我们常见的书籍背面就会有条形码,通过扫描枪等设备扫描就可以获得书籍的ISBN(International standard book number,国际标准书号)。编码方式也很多,比如Code39和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进行开发。

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

///   /// 二维码助手类  ///   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; } }

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

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

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

看下效果:

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

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

你可能感兴趣的文章
为啥么logrotate日志不轮转呢?_新日志size0
查看>>
WinRAR 0day漏洞 附利用过程
查看>>
Linux之逻辑卷管理
查看>>
15.系统虚拟机管理 (linux)
查看>>
js/Jquery 对像不存在或为空的原因
查看>>
nginx(一)安装
查看>>
[AlwaysOn Availability Groups]DMV和系统目录视图
查看>>
[AlwaysOn Availability Groups]监控AG性能
查看>>
SpringMVC+FreeMarker
查看>>
Web性能优化工具WebPageTest(三)——本地部署(Windows 7版本)
查看>>
北京供销大数据集团发布SinoBBD Cloud 一体化推动产业云发展
查看>>
html实现的鼠标放在链接上出现文字提示效果
查看>>
samba
查看>>
菜鸟学Linux 第021篇笔记 特殊权限SUID、FACL、Linux 终端
查看>>
在LAN中搭起的网桥
查看>>
shell 特殊变量
查看>>
Holle World
查看>>
pythopn 迭代器
查看>>
pxe
查看>>
Linux mkdir&rmdir命令
查看>>