• .net 生成随即验证码


    呵呵。今天又学到新东西了。做了个随即的验证码。不是很好看。不过是那么回事!

    基本原理

    生成随即的字符串------建立个图片-------根据图片建立个画布-------在图片上随即画点点(噪点 )----------再把字符串画上去就OK了

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Drawing;
    using System.IO;

    /// <summary>
    /// Code 的摘要说明
    /// </summary>
    public static class Code
    {
        //public Code()
        //{
        //    //剑在心中(602730971.诚叫好友共同进步)
        //    // TODO: 在此处添加构造函数逻辑
        //    //
        //}
        //产生WNum位的随机数。剑在心中(602730971.诚叫好友共同进步)
        private static string Creatstring(int WNum)
        {
            string Str = "1,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,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,P,P,Q,R,S,T,U,V,W,X,Y,Z";
            string[] Var = Str.Split(',');
            Random e = new Random();
            string Code="";
            for (int i = 0; i < WNum; i++)
            {
                int t = e.Next(61);
                Code += Var[t];
            }
            return Code;
        }
        //画图。剑在心中(602730971.诚叫好友共同进步)
        public static MemoryStream CreatCode(out string Code,int WNum)
        {
            Bitmap Img=null ;
            Graphics Grap=null ;
            MemoryStream wstream = new MemoryStream();
            Code= Creatstring(WNum).ToString();
            //颜色集合
            Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
            //字体集合
            string[] fonts ={ "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
            Random rand = new Random();
            Img = new Bitmap((int)WNum * 13 + 10, 32);
            Grap = Graphics.FromImage(Img);
            Grap.Clear(Color.White);
            //在Gaphics中画噪点.剑在心中(602730971.诚叫好友共同进步)
            for (int i = 0; i < 1000; i++)
            {
                int x = rand.Next(Img.Height);
                int y = rand.Next(Img.Width);
                //int P_x = rand.Next();
                //int P_y = rand.Next();
                int colorint = rand.Next(7);
                Grap.DrawRectangle(new Pen(Color.Moccasin), y, x,1, 1);
            }

            //在Graphics中画文字儿
            for(int i=0;i<WNum ;i++ )
            {
                int colIdx=rand.Next(7);
                int fonIdx=rand.Next(5);
                Font f=new Font(fonts[fonIdx],13,System.Drawing.FontStyle.Bold);
                Brush b=new System.Drawing.SolidBrush(c[colIdx]);
                Grap.DrawString(Code.Substring(i,1),f,b,5+i*12,9);
            }
            Img.Save(wstream,System.Drawing.Imaging.ImageFormat.Gif);
            return wstream;
        }

    }

     

  • 相关阅读:
    005 Stream的创建
    006 虚拟主机
    002 nginx的进程模型
    001 胡说八道
    001 nginx的简介和安装
    004 docker配置国内镜像站
    012 SSH
    发放失败,此请求可能存在风险,已被微信拦截【未解决】
    项目使用Nuget,然后SVN checkout后显示缺少引用
    使用存储过程非常慢,但是直接执行SQL很快
  • 原文地址:https://www.cnblogs.com/cestbon/p/1662886.html
Copyright © 2020-2023  润新知