zoukankan      html  css  js  c++  java
  • 随机生成数字验证码

    protected void Page_Load(object sender, EventArgs e)
    {
    // 生成验证码
    string checkCode = RandLetter(4);
    // 把新的验证码保存到Session中
    Session["CheckCode"] = checkCode;
    // 输入验证码
    CreateImages(checkCode);
    }

    /// <summary>
    /// 生成验证图片
    /// </summary>
    /// <param name="checkCode">验证字符</param>
    private void CreateImages(string checkCode)
    {
    int iwidth = (int)(checkCode.Length * 13);
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
    Graphics g = Graphics.FromImage(image);
    g.Clear(Color.White);
    //定义颜色
    Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
    //定义字体
    string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
    Random rand = new Random();
    //随机输出噪点
    for (int i = 0; i < 50; i++)
    {
    int x = rand.Next(image.Width);
    int y = rand.Next(image.Height);
    g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
    }

    //输出不同字体和颜色的验证码字符
    for (int i = 0; i < checkCode.Length; i++)
    {
    int cindex = rand.Next(7);
    int findex = rand.Next(5);

    Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
    Brush b = new System.Drawing.SolidBrush(c[cindex]);
    int ii = 4;
    if ((i + 1) % 2 == 0)
    {
    ii = 2;
    }
    g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
    }
    //画一个边框
    g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);

    //输出到浏览器
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    HttpContext.Current.Response.ClearContent();
    //Response.ClearContent();
    HttpContext.Current.Response.ContentType = "image/Jpeg";
    HttpContext.Current.Response.BinaryWrite(ms.ToArray());
    g.Dispose();
    image.Dispose();
    }

    /// <summary>
    /// 生成随机的字母
    /// </summary>
    /// <param name="count">生成字母的个数</param>
    /// <returns>生成的验证码</returns>
    private string RandLetter(int count)
    {
    string allLetters = "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";
    string[] allChar = allLetters.Split(',');
    string checkCode = "";
    int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数

    //采用一个简单的算法以保证生成随机数的不同
    Random rand = new Random();
    for (int i = 1; i < count + 1; i++)
    {
    if (temp != -1)
    {
    rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
    }
    int t = rand.Next(allChar.Length);
    temp = t;
    checkCode += allChar[t];
    }
    return checkCode;
    }

  • 相关阅读:
    【BZOJ 2440】[中山市选2011]完全平方数
    【BZOJ 1066】[SCOI2007]蜥蜴
    luogu P1317 低洼地
    luogu P1379 八数码难题
    luogu P1886 滑动窗口
    luogu P1032 字串变换
    题解 P1876 【开灯】
    题解 P1720 【月落乌啼算钱】
    题解 P2863 【[USACO06JAN]牛的舞会The Cow Prom】
    关于线性回归
  • 原文地址:https://www.cnblogs.com/liuyudun/p/3812706.html
Copyright © 2011-2022 走看看