zoukankan      html  css  js  c++  java
  • 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了!

      

      窝查,有妹纸也能解!!!!!

     

     【解码有风险,解码需谨慎,且行且珍惜吧。】

    作者:【Why Shang】
    出处:http://www.cnblogs.com/WhyShang/
    转载:欢迎转载,为了保存创作热情,转载请注明出处,谢谢!
  • 相关阅读:
    HDU 1069 Monkey and Banana
    HDU 1029 Ignatius and the Princess IV
    HDU 1024 Max Sum Plus Plus
    Gym100923H Por Costel and the Match
    Codeforces 682C Alyona and the Tree
    Codeforces 449B Jzzhu and Cities
    Codeforces (ccpc-wannafly camp day2) L. Por Costel and the Semipalindromes
    Codeforces 598D (ccpc-wannafly camp day1) Igor In the Museum
    Codeforces 1167c(ccpc wannafly camp day1) News Distribution 并查集模板
    快乐数问题
  • 原文地址:https://www.cnblogs.com/WhyShang/p/3704513.html
Copyright © 2011-2022 走看看