首页 > 其他 > 详细

验证码生成

时间:2020-02-12 09:34:34      阅读:46      评论:0      收藏:0      [点我收藏+]
技术分享图片
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.IO;

namespace Helper
{
    public class VCode
    {
        /// <summary>
        /// 生成验证码图片 字节数组
        /// </summary>
        /// <returns></returns>
        public byte[] GetVCode()
        {
            using (Image img = new Bitmap(80, 30))
            {
                string strCode = GetRandomStr();
                HttpContext.Current.Session["vcode"] = strCode;
                using (Graphics g = Graphics.FromImage(img))
                {
                    g.Clear(Color.White);
                    g.DrawRectangle(Pens.Blue, 0, 0, img.Width - 1, img.Height - 1);
                    DrawPoint(g);
                    g.DrawString(strCode, new Font("微软雅黑", 15), Brushes.Blue, new PointF(5, 2));
                    DrawPoint(g);
                    using (System.IO.MemoryStream ms = new MemoryStream())
                    {
                        //将图片 保存到内存流中
                        img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                        //将内存流 里的 数据  转成 byte 数组 返回
                        return ms.ToArray();
                    }
                }
            }
            return null;
        }


        Random random = new Random();

        string GetRandomStr()
        {
            string str = string.Empty;
            string[] strArr = { "a", "b", "b", "", "1", "2", "", "3", "4", "5", "6", "7", "8", "9", "0" };
            for (int i = 0; i < 5; i++)
            {
                int index = random.Next(strArr.Length);
                str += strArr[index];
            }
            return str;
        }

        void DrawPoint(Graphics g)
        {
            Pen[] pens = { Pens.Blue, Pens.Black, Pens.Red, Pens.Green };
            Point p1;
            Point p2;
            int length = 1;
            for (int i = 0; i < 50; i++)
            {
                p1 = new Point(random.Next(79), random.Next(29));
                p2 = new Point(p1.X - length, p1.Y - length);
                length = random.Next(5);
                g.DrawLine(pens[random.Next(pens.Length)], p1, p2);
            }
        }
    }
}
生成验证码
/// <summary>
        /// 生成验证码
        /// </summary>
        /// <returns></returns>
        public ActionResult VCode()
        {
            Helper.VCode v = new Helper.VCode();
            byte[] arrImg = v.GetVCode();
            return File(arrImg, "image/jpeg");
        }

 

验证码生成

原文:https://www.cnblogs.com/xiaoyangshu/p/12297726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!