天天看點

C# 驗證碼生成

背景:

     //生成驗證碼
      public void CreateImage()
        {
       //擷取4位驗證碼,并轉成小寫。
            string code = getRandomNumber(4).ToLower();
            //驗證碼指派Cookie
            HttpCookie myCookie = new HttpCookie(Constant.LOGIN_VALIDATE_CODE);
            myCookie.Value = MD5Utils.getMD5(code);
            myCookie.Expires = DateTime.Now.AddMinutes(15);
            Response.Cookies.Add(myCookie);//字型名 
            string strFontName = "宋體";
            //字型大小 
            int intFontSize = 12;
            //圖像寬 
            int intWidth = 45;
            //圖像長 
            int intHeight = 20;
            //背景顔色 
            Color bgColor = ColorTranslator.FromHtml("#EFB3FF");
            //前景顔色 
            Color foreColor = ColorTranslator.FromHtml("#FF0000");
            //産生字型 
            Font forFont = new Font(strFontName, intFontSize, FontStyle.Bold);
            //生成圖檔 
            Bitmap newBitmap = new Bitmap(intWidth, intHeight, PixelFormat.Format32bppArgb);
            Graphics g = Graphics.FromImage(newBitmap);
            //定義一個四方形框與字片一樣大小 
            Rectangle newRect = new Rectangle(0, 0, intWidth, intHeight);
            //塗上背景色 
            g.FillRectangle(new SolidBrush(bgColor), newRect);
            //寫字 
            g.DrawString(code, forFont, new SolidBrush(foreColor), 2, 2);
            MemoryStream mStream = new MemoryStream();
            //存入MemoryStream 
            newBitmap.Save(mStream, ImageFormat.Gif);
            g.Dispose();
            newBitmap.Dispose();
            //發送 
            Response.ClearContent();
            Response.ContentType = "image/GIF";
            Response.BinaryWrite(mStream.ToArray());
            HttpContext.ApplicationInstance.CompleteRequest();
        }
     //生成4位驗證碼
     public static string getRandomNumber(int Length)
        {
            System.Text.StringBuilder newRandom = new System.Text.StringBuilder(10);
            Random rd = new Random();
            for (int i = 0; i < Length; i++)
            {
                //得到數字(根據情況二選一)
                newRandom.Append(constant[rd.Next(10)]);
                //得到字元和數字
                newRandom.Append(constant[rd.Next(62)]);
            }
            return newRandom.ToString();
        }
     //驗證碼庫
     private static char[] constant = 
        {
            '0','1','2','3','4','5','6','7','8','9',
            'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
        };                                      

前台(點選圖檔觸發更改驗證碼的方法):

<img border="0" class="text4" align="absmiddle" style="cursor: pointer;" onclick="changeImages();" src="" name="createImage" title="點選換一張圖檔" id="Img3" />      

JavaScript:

function changeImages() {
        var d = new Date();
        var obj = document.getElementById('Img');
        obj.src = "/Common/CreateImage?tmep_seq=" + d.getTime();
}
changeImages();