原文 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。

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

  1. Java生成读取条形码和二维码图片

    原文:http://www.open-open.com/code/view/1453520722495 package zxing; import com.google.zxing.BarcodeFo ...

  2. C#利用Zxing.net生成条形码和二维码并实现打印的功能

        开篇:zxing.net是.net平台下编解条形码和二维码的工具. 下载地址:http://pan.baidu.com/s/1kTr3Vuf Step1:使用VS2010新建一个窗体程序项目: ...

  3. 微信公众号生成带参数的二维码asp源码下载

    晚上闲着没事,一个朋友联系,让帮忙写一个微信公众号利用asp生成带参数的二维码,别人扫了后如果已经关注过该公众号的,则直接进入公众号里,如果没关注则提示关注,关注后自动把该微信用户资料获取到并且保存入 ...

  4. C# 利用ZXing.Net来生成条形码和二维码

    本文是利用ZXing.Net在WinForm中生成条形码,二维码的小例子,仅供学习分享使用,如有不足之处,还请指正. 什么是ZXing.Net? ZXing是一个开放源码的,用Java实现的多种格式的 ...

  5. winform生成条形码和二维码(ZXing.Net)

    首先在项目添加ZXing.Net. 工具-->Nuget包管理器-->Nuget程序包  在所搜栏输入 ZXing.Net 如下图: 添加完成后会看见: 效果图: 所有代码: /// &l ...

  6. C#Zxing.net生成条形码和二维码

    下载Zxing.net官网:https://archive.codeplex.com/?p=zxingnet 或者去VS程序包下载 封装好的代码: using System; using System ...

  7. 使用谷歌Z生成条形码以及二维码

    下载地址:http://zxingnet.codeplex.com/ zxing.net是.net平台下编解条形码和二维码的工具,使用非常方便. 首先下载二进制dll文件,引入工程: using Sy ...

  8. .NET使用ZXing.NET生成中间带图片的二维码

    很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...

  9. (整理).net实现条形码与二维码

    本文由来源网络的知识点组合而成,感谢分享的作者,文章结尾处给出查询资料连接. 条形码(barcode)是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条形码是 ...

随机推荐

  1. ansible笔记

    ansible 资料 ansible 配置 ansible inventory配置文件 ansible模块 http://www.cnblogs.com/iois/p/6216936.html ans ...

  2. STL之vector(向量)

    C++编程语言中有一种叫做Vector的应用方法,它的作用在实际编程中是非常重要的,这里详细介绍一下C++ Vector的相关应用技巧及基本内容: Construct vector #include ...

  3. 高级UNIX环境编程7 进程

    每个程序都会收到一张环境表 extern char **environ; c程序的存储空间布局: 正文段:共享,只读 初始化数据段:存函数以外的赋值 非初始化数据段(bbs):block starte ...

  4. 安装andriod studio时出现Internal error. Please report to https://code.google.com/p/an

    有两种方法的哈 一,在文件中添加  disable.android.first.run=true (我试了这种就好使了哈) 1)进入刚安装的Android Studio目录下的bin目录.找到idea ...

  5. Windows Azure 社区新闻综述(#77 版)

    欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 ·   文章: Windows Azure 表存储简 ...

  6. vs使代码可以折叠的方法

    set [工具]->[选项]->[文本编辑器]->[C/C++]->[查看]->[大纲显示]->[大纲语句块] = True

  7. Java中static、final用法

    一.final 1.final变量: 当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引 ...

  8. 初步swift语言学习笔记2(可选类型?和隐式可选类型!)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 假设认为文章对你有所帮助.请通过留言 ...

  9. 仿知乎安卓client滑动删除撤销ListView

    标签(空格分隔): Android 新版的知乎安卓client有一个有趣的功能,就是在一个item里.向右滑动时整个item会越来越透明,滑动到一半时,整个item就不见了.放开手指就是删除.删除后还 ...

  10. Keil4 每次选build 编译(F7)都全部编译的解决办法

    Keil4 每次选build 编译(F7)都全部编译的解决办法 http://blog.csdn.net/wchengshen/article/details/50440079 Keil4 每次选bu ...