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了!

  

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

【解码有风险,解码需谨慎,且行且珍惜吧。不要乱解哦,否则后果。。。哈哈~】

时间: 2024-10-30 07:16:22

C#实现二维码生成与解码的相关文章

Java二维码生成与解码

基于google zxing 的Java二维码生成与解码 一.添加Maven依赖(解码时需要上传二维码图片,所以需要依赖文件上传包) <!-- google二维码工具 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.1.0</version> </dependen

C#二维码生成与解码(二)

[窗体效果图] [程序源代码] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using ZXing; using ZXing.QrCode.Internal; using Sy

Java二维码生成与解码工具Zxing使用

1 package com.csii.zxing.test; 2 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 import java.io.IOException; 6 import java.util.HashMap; 7 import java.util.Hashtable; 8 import java.util.Map; 9 10 import javax.imageio.ImageIO; 11 12 im

二维码生成与解码

有三种方式: 1.ZXing.Net 实例源码: protected void Page_Load(object sender, EventArgs e) { DateTime dtBegin = DateTime.Now; string fileName = AppDomain.CurrentDomain.BaseDirectory + "bin\\" + Guid.NewGuid().ToString() + ".jpg"; string content = H

.NET 二维码生成(ThoughtWorks.QRCode)

引用ThoughtWorks.QRCode.dll (源代码里有) 1.简单二维码生成及解码代码: //生成二维码方法一 private void CreateCode_Simple(string nr) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; qrCodeEncoder.QRCodeScale = 4

NET 二维码生成

NET 二维码生成(ThoughtWorks.QRCode) 引用ThoughtWorks.QRCode.dll (源代码里有) 1.简单二维码生成及解码代码: //生成二维码方法一 private void CreateCode_Simple(string nr) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(); qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE

【转】Android 二维码 生成和识别(附Demo源码)--不错

原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXin

zxing实现二维码生成和解析

zxing实现二维码生成和解析 博客分类: 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageW

java zxing实现二维码生成和解析zxing实现二维码生成和解析

zxing实现二维码生成和解析 二维码 zxing 二维码的生成与解析.有多种途径.我选择用大品牌,google老大的zxing. gitHub链接是(我用的3.0.0,已经是nio了) https://github.com/zxing/zxing/tree/zxing-3.0.0 Java代码   // 其中输出图像和读取图像的类在core包 MultiFormatReader MultiFormatWriter // 生成矩阵的类在javase的包里 MatrixToImageWriter