C#實現二維碼生成與解碼


  前幾天公司內部分享了一個關於二維碼的例子,覺得挺好玩的,但沒有提供完整的源碼。有時候看到一個好玩的東西,總想自己Demo一個,於是抽空就自己研究了一下。

  一、二維碼的原理

  工欲善其事,必先利其器。要生成二維碼,首先得了解一下,什么是二維碼。關於二維碼,百度百科這么說的:二維條碼(二維碼)是用某種特定的幾何圖形按一定規律在平面(二維方向)分布的黑白相間的圖形記錄數據符號信息的。二維碼是DOI(Digital Object Unique Identifier,數字對象唯一識別符)的一種。二維碼的優點:二維碼存儲的數據量更大;可以包含數字、字符,及中文文本等混合內容;有一定的容錯性(在部分損壞以后可以正常讀取);空間利用率高。

  好吧。關於二維碼的原理我也是讀了個大概。了解了一些二維碼的概念。雖然平時身邊離不開二維碼,但我們卻很少知道,為什么二維碼長成這樣?現在都是彩屏時代,為什么二維碼卻是黑白的?這是因為:二維碼的黑色表示二進制的“1”,白色表示二進制的“0”(原因就不說了吧)。

  二、二維碼加密與解密

  首先去http://zxingnet.codeplex.com/下載一個資源文件,下載后解壓,找到文件夾"net4.5",然后找到Zxing.dll,引入到工程文件中。

  引入dll后,自己可以根據需要完成相關二維碼的功能。如下圖:

 

  生成二維碼核心代碼如下:

 1 /// <summary>
 2         /// 生成二維碼
 3         /// </summary>
 4         /// <param name="msg">二維碼信息</param>
 5         /// <returns>圖片</returns>
 6         private Bitmap GenByZXingNet(string msg)
 7         {
 8             BarcodeWriter writer = new BarcodeWriter();
 9             writer.Format = BarcodeFormat.QR_CODE;
10             writer.Options.Hints.Add(EncodeHintType.CHARACTER_SET, "UTF-8");//編碼問題
11             writer.Options.Hints.Add(
12                 EncodeHintType.ERROR_CORRECTION,
13                 ZXing.QrCode.Internal.ErrorCorrectionLevel.H
14 
15             );
16             const int codeSizeInPixels = 250;   //設置圖片長寬
17             writer.Options.Height = writer.Options.Width = codeSizeInPixels;
18             writer.Options.Margin = 0;//設置邊框
19             ZXing.Common.BitMatrix bm = writer.Encode(msg);
20             Bitmap img = writer.Write(bm);
21             return img;
22         }
生成二維碼

  同時,可以給二維碼進行解密,User可以上傳二維碼圖片進行解碼:

 1 private void btnUpload_Click(object sender, EventArgs e)
 2         {
 3             OpenFileDialog ofd = new OpenFileDialog();   //創建一個對話框對象
 4             ofd.Title = "請選擇上傳的圖片";  //為對話框設置標題
 5             ofd.Filter = "圖片格式|*.bmp";  //設置篩選的圖片格式
 6             ofd.Multiselect = false;        //設置是否允許多選
 7 
 8             if (ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 9             {
10                 string filePath = ofd.FileName;//獲得文件的完整路徑(包括名字后后綴)
11                 txtUploadFile.Text = filePath;//將文件路徑顯示在文本框中
12                 int position = filePath.LastIndexOf("\\");
13                 string fileName = filePath.Substring(position + 1);
14                 using (Stream stream = ofd.OpenFile())
15                 {
16                     using (FileStream fs = new FileStream( fileName, FileMode.Create))
17                     {
18                         stream.CopyTo(fs);
19                         fs.Flush();
20                     }
21                     this.pictureBox1.ImageLocation =  fileName;
22                 }
23             }
24         }
WinForm 上傳圖片

  圖片上傳成功后,點解密二維碼即可!

 1 /// <summary>
 2         /// 解密二維碼
 3         /// </summary>
 4         /// <param name="barcodeBitmap">圖片</param>
 5         /// <returns>二維碼信息</returns>
 6         private string DecodeQrCode(Bitmap barcodeBitmap)
 7         {
 8             BarcodeReader reader = new BarcodeReader();
 9             reader.Options.CharacterSet = "UTF-8";
10             var result = reader.Decode(barcodeBitmap);
11             return (result == null) ? null : result.Text;
12         }
解密二維碼

  至此,二維碼的生成與解碼已經順利OK了!

  

  窩查,有妹紙也能解!!!!!

 

 【解碼有風險,解碼需謹慎,且行且珍惜吧。】

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM