图片验证码的制作

验证码验证是很多时候必不可少的功能。例如在账号登陆、新建用户、修改密码等等。验证码又分有很多种,有短信验证码、图片验证码、动态验证码等等。各个验证码有着各自不同的功能,现在就介绍一些图片验证码的制作,图片验证码一般是为了防止机器人去操作某个功能。也是起到不可或缺的重任的。

    首先你得要创建一个实体类,我们需要把生产图片验证码的方法放到一个实体类里,方便查看也方便调用,既然是验证码那内容肯定是随机的,所以在这个实体类里面的内容有两部分,一部分是产生随机数的,还有一部分是根据生产的随机数生成图片的。

图片验证码的制作

       第一个是产生随机数的方法,第二个就是根据数据产生图片的方法。两方法分别都要传一个参数,第一个是生成字符的长度,第二个是第一个方法生成的字符串。

       产生随机数的方法内容:第一步得要声明一个空的字符串来存放随机产生的字符。String.Empty就是空字符串的意思。还需要new一个生成随机字符的对象,用来生成计算的随机数字。

图片验证码的制作

   

 

然后就开始生成随机字符,生成随机字符需要在一个循环里进行,条件就是你要生成字符的长度,每一次循环就生成一个随机字符。循环里面还需要创建一个存放每次生成的字符的变量,就可以用先前new出来产生随机数字的对象来生成数字了。

图片验证码的制作

    有随机数字生成后就要开始生成随机字符了,一般图片验证码都是三个内容,数字、大写字母、小写字母。接着就可以通过这个随机数字来判断是该生成数字或是大写字母还是小写字母,只需要把这个随机数字除以3然后看余数就行了。任意一个非负随机整数除以三余数就只有三个,0、1、2。余数如果等0就产生一个数字,等于1就产生一个大写字母,等于2就产生一个小写字母,然后转换为字符串,拼接到一开始声明好的变量中,需要产生多少个字符就循环多少次。循环完成后就把每次循环后拼接好的字符串返回。这样第一个产生随机数的方法就完成了。

图片验证码的制作

    接着就是根据生产的随机数生成图片的方法了,创建这个方法时要使用byte类型,因为这个方法是生成图片的,要通过byte数组的形式进行返回。生成一张图片实则就是在画一张图片的意思,需要画板、画笔、颜料。先new一个画板出来,再定义一支画笔,然后用画笔把画板全部涂成想要的颜色。Color后面跟着的就是颜色值,既然要把画板new出来,那画板就一定会有宽高,应该在生成图片时就把宽高给图片,就是Bitmap(宽度,高度)。

图片验证码的制作

 

       然后就可以开始绘制内容了,先定义好绘制文字时的颜色,然后就用画笔开始绘制,参数如下:DrawString(内容,字体样式,字体颜色,x坐标,y坐标);字体样式里面又可以有多个参数,例如绘制的是什么字体、字体的大小是多少等等。x坐标和y坐标是表示开始绘制的位置。

图片验证码的制作

    一开始就说过,图片验证码是为了防止机器人去操作某个功能,所以除了绘制内容之外还要绘制一些干扰线和前景干扰点。想要画一条线就需要有四个坐标点,开始点的xy坐标和结束点的xy坐标,既然是干扰用的,那每次画线就不能一样或者有规律,所以这四个坐标点的值就需要随机获取的。random.Next(开始位置,结束位置),意思是取开始位置到结束位置中的一个值,开始位置如果是0可忽略不写,x坐标的话就是取从0到图片宽度数值中的一个值,y坐标的话就是取从0到图片高度数值中的一个值,这样就可以做到每条线都是随机产生的了,接着就是开始画线了。前景干扰点的画法跟线的差不多,不过点只有两个坐标点就可以确定了。

 

图片验证码的制作

    再为这张图片画一个边框这张图片就完成了。

图片验证码的制作

       然后将图片读为内存流,再转换为byte数组的形式返回就可以使用了。

图片验证码的制作

    使用方法:先用第一个方法生成一个长度为需要的字符串,再把生成的字符串传到第二个方法生成验证码图片,最后把他以图片的形式返回到页面。存入session的一步也是必要的,这是用来比较用户输入的验证码和图片中的验证码是否一致的唯一比较。

图片验证码的制作