各位技术大牛,小弟第一次写博客,写的不好勿喷,还请多多指教。
总结C#方法生成二维码的两种用途。
第一种是把某个重要的字段比如主键通过des加密放到生成的二维码当中。扫描二维码的时候把这个字段获取回来,得到这个字段就可以做其他用途了。以生成房间号二位码为例。
public static string GetRoomCodeInfo(string strRID, int iSize){
if (strRID.Length == 0) return "0:数据不能为空";
if (iSize == 0 || iSize > 20) iSize = 4;
//删除二维码缓存
bool blResult = T_RoomQcodeTemp.DelRoomQcodeTemp(strRID);
string strRnd = GetRandInfo();
//生成二维码缓存
T_RoomQcodeTemp temp = new T_RoomQcodeTemp();
temp.rid = strRID;
temp.TJSJ = DateTime.Now.ToString("yyyyMMddHHmmss");//可以用来判断二维码时间的有效性
temp.YZID = strRnd;
temp.Insert();
//把主键加密
string strID = Gdqz.Base.Config.Common.GetDESEncryptString(strRID + "|" + strRnd);
string strData = strID;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();//创建一个编码器
//编码方式,BYTE支持中文
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeScale = iSize;//大小,值越大,像素就越高
qrCodeEncoder.QRCodeVersion = 0;//版本
//错误校验,错误更正有4个等级
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
System.Drawing.Bitmap bmp = qrCodeEncoder.Encode(strData);//对字符串进行编码生成对应的二维码图像
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//把图像保存到指定的流当中
string strResult = Convert.ToBase64String(ms.ToArray());//把流的字节数组转换成字符串
bmp.Dispose();//释放Bitmap所占用的资源
ms.Dispose();//释放MemoryStream所占用的资源
return "1:" + strResult;
}
//生成随机数
private static string GetRandInfo()
{
Random rnd = new Random(System.Environment.TickCount);
string strRnd = rnd.Next(111111, 999999).ToString();
return strRnd;
}
另一种是把一个写好的html页面放到服务器上,把这个html页面的链接当作字符串写到二维码当中。当然这个链接后面可以叠加参数。附上代码
public static string GetCompanyQRCodeInfo(string strRyID, int iSize)
{
try
{
if (strRyID.Length == 0) return "0:数据不能为空";
if (iSize == 0 || iSize > 20) iSize = 4;
//这里写你服务器上html的连接,链接后面可以加参数
string strData = "http://域名/c/?id=" + strRyID;
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCodeEncoder.QRCodeScale = iSize;
qrCodeEncoder.QRCodeVersion = 0;
qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
System.Drawing.Bitmap bmp = qrCodeEncoder.Encode(strData);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
string strResult = Convert.ToBase64String(ms.ToArray());
bmp.Dispose();
ms.Dispose();
return "1:" + strResult;
}
catch (Exception ex)
{
Afti.Base.Log.AddLog(ex.Message);
return "0:发生错误";
}
}
当扫描二位码的时候会转到你写的html页面上。我们可以获取该链接后面携带的参数,用于ajax请求。在该html页面事先写好一个加载事件
$(function () { GetqrCode(); })
function GetqrCode()
{
var strID = GetQueryString("id");//获取链接后面携带的参数
var url = '/Ajax/AjaxService.aspx';
$.get(url, { op: "GetqrCode", id: strID }, Crtl_GetqrCode);//用于ajax请求
function Crtl_GetqrCode(resultObj, status)
{
if(status=="success")
{
var res = resultObj;
if(res.substring(0,1) == "1")
{
var strInfo = res.substring(2);
var myobj = eval(ClearScript(strInfo));
$("#Fdxm").html(myobj[0].Fdxm);
$("#Lxdh").html(myobj[0].FdLxdh);
$("#glzxm").html(myobj[0].GLZxm);
$("#glzlxdh").html(myobj[0].GLZLxdh);
$("#fwdz").html(myobj[0].FWDZ);
$("#Fjzs").html(myobj[0].Fjzs);
$("#kfjs").html(myobj[0].Kfjs);
$("#pcsmc").html(myobj[0].PCSMC);
$("#pcslxdh").html(myobj[0].PCSLXDH);
}
}
}
}
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}