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

1、条形码web

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

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

最后上个效果图:网站

2、二维码ui

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

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

好比,咱们封装了一个最精简的类:.net

/// <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;  
    }  
}  

使用上面两个方法,就能够生成和解析二维码。code

咱们在程序中调用的时候,就能够这样。

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。

相关文章
相关标签/搜索