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。

相關文章
相關標籤/搜索