验证码生成

时间:2024-04-01 07:50:41

对于验证码的生成,首先我们需要在mvc的的目录中,创建一个存放静态类的目录。(静态类:公共静态方法,不需要new,直接点出来的方法)
1.随机字符串的生成
获取随机机的字符串,给她设置随机数的生成长度。以长度作为参数(需要产生多少位的,后续在控制器把长度参数给传到这里)
创建一个随机数的随机类(用于随机生成数字):Random random = new Random();//随机数生成器
使用循环(i=0;i<intLength;i++)来产生不同的数值,循环多少次产生多少位数,每次循环产生的数,通过判断取余来确定产生大小字母(在生成随机数后,我们需要把随机的数值转换成字符)
验证码生成
2、根据字符串创建验证码图片
上面我们已经得到了字符串,现在我们需要做的便是把她给画出来(验证码的生成等同于作画,根据生成的字符串把她给画出来)既然是做图,那就需要一张空白的纸,一个用于画图的笔,
新增图片,这里使用纸对象:Bitmap newBitmap = new Bitmap(strandom.Length*20,38);这里等同于新建一张空白的图纸,长度等于20。
新建一个笔对象:Graphics g = Graphics.FromImage(newBitmap);
下一步,把空白的纸的颜色清除后,设置成白色
然后我们就开始作画
写字,SolidBrush(Color.Red);指定字体的颜色
用笔把字符串给画出来,使用指定的字体及大小,在那里开始画(x轴y轴的位置):g.DrawString(strRandom, New Font(“Aril”,18), solidBrush, 12, 4);
3、画干扰线。
使用for循环:for(int i=0;i<10;i++)
画干扰线
以x轴为
4、画干扰点
一个坐标确定一个点,通过随机数,随机产生一个颜色
5、画边框
画一个矩形,从以零坐标的开始的画
经过上面的流程,我们得到了一张图片的二进制数组
验证码生成
转换格式
接下来我们需要把画好的图保存到内存流中去
新建一个内存流叫ms 的内存流的类, 引用MemoryStream内存流
MemoryStream ms = new MemoryStream();
然后把newBitmap这个图,她(jpeg格式的图)给保存到内存流中去
newBitmap.Save(ms, ImageFormat.Jpeg);
接下来我们需要把,内存流里的数据,转换成二进制的数组
return ms.ToArray();
接下来是使用方法
在使用前(需要在控制器页面,因用存放静态类的目录)在控制器新建一个类,

  1. 生成长度为5的随机的验证码字符串
  2. 根据生成的验证码字符串生成 验证码图片
  3. 将验证码字符串存入session中 key值为
  4. 把图片返回到视图
    验证码生成
    效果图:
    验证码生成
    总结:验证码的生成,就是使用,得到到一串随机的数。在得到这随机数后,我们需要把她给画出来,在计算机上画图写字,需要x轴y轴的坐标。要写出比如大小写字母之类的,需要用到26个字母和数字符号ASCII码对照表,每个字母都有其对应的Ascll值。上面生成大小写就是使用了ascll值。验证码的本质是验证是不是人为操作,避免机器登录。那么除了把字符给画出来外还需要设置干扰线,干扰点。让机器无法识别出来。