二维码生成的方法

各位技术大牛,小弟第一次写博客,写的不好勿喷,还请多多指教。

总结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;
}

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjslfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值