二维码现在越来越流行,可以使用手机上或其它移动终端上的二维码扫描器软件对着二维码一扫,就可以得到相关信息。在互联网站上,可以找到很多二维码的工具,甚至还有不少在线生成、解析二维码的网站。在业务系统当中,比如档案管理系统中,以前一般都是通过条形码(一维码)来存储档案职工的基本信息,但是存储容量有限。而现在完全可以使用二维码存储更多容量的信息。
我们这里使用了ThoughtWorks.QRCode.dll这个类库,在asp.net项目中引用这个dll文件,就可以使用相关API进行开发。
比如,我们封装了一个最精简的类:
[csharp]
/// <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;
}
}
使用上面两个方法,就可以生成和解析二维码。
我们在程序中调用的时候,就可以这样。
[csharp]
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的相关知识。
看下效果:
点击按钮,我们把文本框中的信息(含数字、字母、中文、时间等),生成了二维码图片,并反过来进行了解析。