生成验证码

来源:互联网 发布:联通电信网络转换 编辑:程序博客网 时间:2024/06/05 16:45

因为楼主运用的是MVC的方式绑定的所以获取方式如下:
img标签
id=”captcha_img”
onclick=”document.getElementById(‘captcha_img’).src=document.getElementById(‘captcha_img’).src+’?’” alt=”点击更换” title=”点击更换” src=”@Url.Action(“SecurityCode”)” class=”m”

**获取值 比较**TempData[“SecurityCode”];

region 生成验证码图片

    // [OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]    public ActionResult SecurityCode()    {        string oldcode = TempData["SecurityCode"] as string;        string code = CreateRandomCode(5);        TempData["SecurityCode"] = code;        return File(CreateValidateGraphic(code), "image/Jpeg");    }    /// <summary>    /// 创建验证码    /// </summary>    private string CreateRandomCode(int codeCount)    {        string allChar = "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,W,X,Y,Z";        string[] allCharArray = allChar.Split(',');        string randomCode = "";        int temp = -1;        Random rand = new Random();        for (int i = 0; i < codeCount; i++)        {            if (temp != -1)            {                rand = new Random(i * temp * ((int)DateTime.Now.Ticks));            }            int t = rand.Next(35);            if (temp == t)            {                return CreateRandomCode(codeCount);            }            temp = t;            randomCode += allCharArray[t];        }        return randomCode;    }    /// <summary>    /// 创建验证码的图片    /// </summary>    public byte[] CreateValidateGraphic(string validateCode)    {        Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27);        Graphics g = Graphics.FromImage(image);        try        {            //生成随机生成器            Random random = new Random();            //清空图片背景色            g.Clear(Color.White);            //画图片的干扰线            for (int i = 0; i < 25; i++)            {                int x1 = random.Next(image.Width);                int x2 = random.Next(image.Width);                int y1 = random.Next(image.Height);                int y2 = random.Next(image.Height);                g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);            }            Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic));            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),             Color.Blue, Color.DarkRed, 1.2f, true);            g.DrawString(validateCode, font, brush, 3, 2);            //画图片的前景干扰点            for (int i = 0; i < 100; i++)            {                int x = random.Next(image.Width);                int y = random.Next(image.Height);                image.SetPixel(x, y, Color.FromArgb(random.Next()));            }            //画图片的边框线            g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);            //保存图片数据            MemoryStream stream = new MemoryStream();            image.Save(stream, ImageFormat.Jpeg);            //输出图片流            return stream.ToArray();        }        finally        {            g.Dispose();            image.Dispose();        }    }    #endregion
1 0