<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      來源:https://blog.csdn.net/Yuhang_Zhou/article/details/140614304
      驗證碼輔助類
      using System.Drawing;
      using System.Drawing.Imaging;
      
      namespace XCGApp
      {
          /// <summary>
          /// 驗證碼輔助類
          /// </summary>
          public class ValidateCodeUtil
          {
              /// <summary>
              /// 驗證碼長度 
              /// </summary>
              public int CodeLen { get; set; }
              /// <summary>
              /// 驗證碼
              /// </summary>
              public string VCode { get; private set; }
              /// <summary>
              /// 驗證碼圖像
              /// </summary>
              public Bitmap VCodeImg { get; private set; }
      
              private int fineness = 70;//圖片清晰度  數值越大越清晰
              private int imgWidth = 48;//圖片寬度
              private int imgHeight = 24;//圖片高度 
              private int fontSize = 14;//字體大小
              private string fontFamily = "Microsoft YaHei";//字體名稱
      
              /// <summary>
              /// 生成驗證碼 
              /// </summary>
              public string CreateVCode(int codeLen = 4)
              {
                  CodeLen = codeLen;
      
                  string vCode = "";
                  Random random = new Random();
                  for (int i = 0; i < CodeLen; i++)
                  {
                      int n = random.Next(10);
                      vCode += n.ToString();
                  }
                  VCode = vCode;
                  return vCode;
              }
      
              /// <summary>
              /// 驗證碼圖像Byte
              /// </summary>
              /// <returns></returns>
              public byte[] GetCodeImgByte()
              {
                  VCodeImg = new Bitmap(imgWidth, imgHeight);
                  //生成像素點
                  DrawPixel(VCodeImg);
                  //繪制驗證碼圖像
                  DrewVCode(VCodeImg, VCode);
                  //Bitmap轉byte[]
                  byte[] imgByte = BitmapToByte(VCodeImg);
      
                  return imgByte;
              }
              /// <summary>
              /// 驗證碼圖像Byte
              /// </summary>
              /// <returns></returns>
              public byte[] GetCodeImgByte(string code)
              {
                  VCodeImg = new Bitmap(imgWidth, imgHeight);
                  //生成像素點
                  DrawPixel(VCodeImg);
                  //繪制驗證碼圖像
                  DrewVCode(VCodeImg, code);
                  //Bitmap轉byte[]
                  byte[] imgByte = BitmapToByte(VCodeImg);
                  return imgByte;
              }
      
              /// <summary>
              /// 生成像素點
              /// </summary>
              private void DrawPixel(Bitmap bitmap)
              {
                  Random random = new Random();
                  for (int i = 0; i < bitmap.Width; i++)
                  {
                      for (int j = 0; j < bitmap.Height; j++)
                      {
                          if (random.Next(90) <= fineness)
                              bitmap.SetPixel(i, j, Color.LightGray);
                      }
                  }
              }
      
              /// <summary>
              /// 繪制驗證碼圖像 
              /// </summary>
              /// <param name="bitmap"></param>
              private void DrewVCode(Bitmap bitmap, string vCode)
              {
                  Graphics g = Graphics.FromImage(bitmap);
                  Font font = new Font(fontFamily, fontSize, FontStyle.Regular);
                  g.DrawString(vCode, font, Brushes.Black, 0, 0);
              }
      
              /// <summary>
              /// Bitmap轉byte[]
              /// </summary>
              private byte[] BitmapToByte(Bitmap bitmap)
              {
                  MemoryStream ms = new MemoryStream();
                  bitmap.Save(ms, ImageFormat.Bmp);
                  byte[] imgByte = ms.GetBuffer();
                  return imgByte;
              }
          }
      }

      api接口

      [HttpGet]
      public ActionResult ShowCode(string key)
      {
          var codeObj = RedisUtil.GetRedis().Get(key);
          if (codeObj == null)
          {
              ApiResult res = new ApiResult()
              {
                  Code = "-1",
                  Message = "驗證碼失效,請刷新重試。"
              };
              return Json(res);
          }
          else
          {
              string vCode = codeObj.ToString();
              //生成驗證碼圖像Byte
              ValidateCodeUtil validateCode = new ValidateCodeUtil();
              byte[] imgByte = validateCode.GetCodeImgByte(vCode);
              return File(imgByte, "image/jpeg");
          }
      }

      api接口生成驗證碼

      [HttpPost]
      public ApiResult GenerateValidateNo([FromBody]VCDto dto)
      {
          ApiResult res = new ApiResult()
          {
              Code = "-1",
              Message = "請求失敗"
          };
          try
          {
              if (!string.IsNullOrEmpty(dto.OldKey))
              {
                  //移除舊驗證碼
                  RedisUtil.GetRedis().Remove(dto.OldKey);
              }
      
              //驗證碼的RedisKey
              var guid = Guid.NewGuid().ToString().Replace("-", "");
              //生成驗證碼
              ValidateCodeUtil validateCode = new ValidateCodeUtil();
              string vCode = validateCode.CreateVCode();
              //保存進Redis,1分鐘有效。
              RedisUtil.GetRedis().Insert(guid, vCode, DateTime.Now.AddMinutes(1));
              res.Code = "";
              res.Message = "OK";
              res.Data = guid;
              return res;
          }
          catch (Exception e)
          {
              res.Message = "驗證碼生成異常:" + e.Message;
              return res;
          }
      }

      vue前端<img id="imgvcode" ref="imgvcode" src="" @click="GetVerifyCode()" />

      mounted() {
          this.GetVerifyCode();
      },
      methods: {
          GetVerifyCode() {
            let vcSrc = that.$refs.imgvcode.src;
            var q = vcSrc.match(new RegExp('[?&]' + 'key' + '=([^&#]*)'));
            let oldKey = (q && q[1]) || '';
            let para = { "OldKey": oldKey };
            PostRequestAPI("Test/GenerateValidateNo", para).then((res) => {
              if (res.Code == "") {
                that.form.validateCodeKey = res.Data;
                that.$refs.imgvcode.src = '/Test/ShowCode?key=' + res.Data;
              } else {
                alert(res.Message);
              }
            });
          },
      }

       

      posted on 2024-11-07 17:47  邢帥杰  閱讀(41)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲av日韩av一区久久| 宽甸| 国产av综合一区二区三区| 无套内谢少妇高清毛片| 成人亚洲性情网站www在线观看| 狠狠综合久久av一区二| 国产偷拍自拍视频在线观看| 韩国av无码| 中国女人高潮hd| 欧美大bbbb流白水| 亚洲欧美日韩愉拍自拍美利坚| 中国极品少妇videossexhd| 国产视频一区二区在线看| 日韩高清在线亚洲专区国产| xxxxbbbb欧美残疾人| 亚洲情A成黄在线观看动漫尤物 | 性欧洲大肥性欧洲大肥女| 陆良县| 天堂中文8资源在线8| 亚洲人成电影在线天堂色| 国产免费又黄又爽又色毛| 亚洲成av人片在www鸭子| 亚洲AV高清一区二区三区尤物| 老少配老妇老熟女中文普通话| 炉霍县| 高清免费毛片| 亚洲性线免费观看视频成熟| 宁波市| 国产高清在线精品一本大道| 国产成AV人片久青草影院| 人妻人人澡人人添人人爽| 老师破女学生处特级毛ooo片| 精品粉嫩国产一区二区三区| 国产欧美综合在线观看第十页| 国产偷国产偷亚洲清高动态图| 国语精品自产拍在线观看网站| 鄂托克旗| 麻豆亚州无矿码专区视频| 免费a级毛片无码av| 精品国产三级a∨在线欧美| 亚洲人成绝网站色www|