动态验证码制作(RandomCodeImage )

在很多的网页中,他们的登录,注册等等地方都有验证码的存在,这下验证码都是动态生成的,有些验证码模糊不堪,有些干扰很多,

而验证码是用来干什么的呢?防止人为输入的不安全?错,验证码真正的用途在于,防止机器的识别,所以,验证码往往都是图片格式的,

人可以识别出来,而机器就识别不出来,这样就可以防止机器识别,就可以保证正在操作的是人,而并不是机器的操作,安全性更高;

下面就分享一下我自己写得一个简单的验证码制作的代码!希望可以一起学习,有什么不足,敬请指正;

这是我封装的一个验证码制作的java类;

copy源代码:

package com.cj.test;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.servlet.ServletOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class RandomCodeImage {
    
    public static BufferedImage drawRandomCode(int width,int height,int fontNum){   //调用时只需要传入三个参数,宽.高,字符数;
        BufferedImage bufferedImage = new BufferedImage(width, height,
                BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics2d=(Graphics2D)bufferedImage.getGraphics();
        Color color=new Color((int)(Math.random()*35)+219,
                (int)(Math.random()*35)+219,(int)(Math.random()*35)+219);
        graphics2d.setBackground(color);
        graphics2d.clearRect(0, 0, width, height);
        
        //产生随机的颜色分量来构造颜色值,输出的字符的颜色值都将不同;
        Color fColor=new Color((int)(Math.random()*71)+55,
                (int)(Math.random()*71)+55,(int)(Math.random()*71)+55);
        
        
        //画边框
        graphics2d.setColor(Color.black);
        graphics2d.drawRect(0, 0, width-1, height-1);
                
        
        graphics2d.setColor(fColor);
        
        //设置字体,字体的大小应该根据图片的高度来定
        graphics2d.setFont(new Font("Times new Roman",Font.BOLD, height-20));
        
        
        //randomCode用于保存随机产生的验证码,以便于用户登录后进行验证
        StringBuffer randomCode=new StringBuffer();
        
        //随机产生的文字输出Y坐标,也跟高度有关系
        int sp=(int)(Math.random()*(height-23))+22;
        for (int i = 0; i < fontNum; i++) {
            //随机产生的4位验证码字符
            char strRand=(char)(Math.random()>0.50?(int)(Math.random()*9)+48
                    :(int)(Math.random()*25)+97);
            //用随机产生的颜色将验证码绘制到图像中。
            graphics2d.drawString(String.valueOf(strRand), 24*i+12
                    , sp+(int)(Math.random()*5));
            //将4个随机产生的数组合到一起
            randomCode.append(strRand);
            
        }

    //  随机生成几条干扰线条,最少2条,最多5条;
        for (int i = 1; i < (int)(Math.random()*3)+3; i++) {
            graphics2d.drawLine(0,sp-(int)(Math.random()*20),width
                    ,sp-(int)(Math.random()*20));
        }
        return bufferedImage;
    }
}

在Servlet中调用时代码例子:

//将图像输出到Servlet输出流中;
        ServletOutputStream sos=response.getOutputStream();
        JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(sos);
        encoder.encode(RandomCodeImage.drawRandomCode(130, 50, 5));

时间: 2024-10-06 10:30:21

动态验证码制作(RandomCodeImage )的相关文章

网站验证码制作

asp.net验证码制作 using System; using System.IO; using System.Drawing; using System.Drawing.Imaging; using System.Text; using System.Collections; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebPa

Servlet动态验证码的生成-带数字和字母

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 一.实现的思路: (1)首先,需要创建一个Servlet.该Servlet通过字节型响应给客户端返回一个图片,该图片是通过JDK中Java 2D的类库来生成一个图片.图片的生成是依靠一个随机数来完成,然后将这个随机数写成图片格式.最后在Session将这个随机的字符串的状态保持住,以便在用户填写后进行对比. (2)其次,在需要加入验证码的JSP页面中,通过<img src="生成验证码

登录页面动态验证码的设置

登录页面动态验证码的设置 采用php中创建对象的思想进行动态验证码的设置 1.创建出一个背景图片,用来存放动态码输出位置 1 function createImage(){ 2 // 创建图片对象,并设置图片的宽高 imagecreatetruecolor 3 $this->image = imagecreatetruecolor($this->width, $this->height); 4 // 图片创建背景颜色 5 // rand(下界,上界), php中的随机数 6 $backg

linux 下的动态库制作 以及在python 中如何调用 c 函数库

动态库: 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库.Wind

静态、动态库制作使用

本质 库是一种可执行代码的二进制格式,可以被载入内存中执行 库分静态库和动态库两种. 一.概念 静态函数库 库的名字一般是libxxx.a 函数库的链接是在编译时期完成 所有相关对象与牵涉的函数库被链接合成一个可执行文件 运行时,与函数库再无瓜葛 动态函数库 库的名字一般是libxxx.so 函数库的链接是在运行时期完成 运行时,在运行环境中必须有相应的库 二.优缺点 静态函数库缺点 文件较大,浪费空间 库或者程序一方改变都使得重新编译 动态函数库优点 文件较小,节省空间. 库具有公用性,内存中

【Web】Java生成中文GIF动态验证码-集成SpringMVC

转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 说明 GIF验证码相对于JPG图片验证码来说,要更难破解一些,加大了破解的代价. 从昨天到现在,写了一个小小的GIF验证码项目(中文成语). 当然,你可以自己修改成字母数字的.我只是单纯的觉得中文验证码的破解代价更高一点~ 我在这里生成GIF图片的类,用到了国外牛人的三个类,也就是: AnimatedGifEncoder LZWEncoder 和NeuQuant,这三个类. 没办法

Linux使用ssh动态验证码登录机器

ssh动态验证码登录机器 Google Authenticator是一个动态验证码程序,兼容各种智能手机平板设备,可以用来做各种帐号的二次验证,增加帐号的安全性.SSH是Linux系统的最重要防线之一,为了防止密码泄露或者被爆破,可以使用Google Authenticator来做二次验证,使用方法也很简单 谷歌身份验证器生成的是动态验证码,默认30秒更新.修改配置,SSH登录必须在输入密码之前输入动态验证码.即使账号和密码泄露,验证码输入错误,仍然无法登录.苹果或者安卓手机端可以安装身份验证器

12306的动态验证码变成静态

本以为这次12306的动态验证码很厉害,什么刷票软件都不行了,看了以后发现并不是很复杂,估计不出两日刷票软件又会卷土重来,开来要一个验证码很难遏制这些刷票软了. 这次换的动态验证码采用的是GIF格式在客户端输出,至于要拿到这个gif文件然后把动态图的各张图片拼凑起来就能得到完整的静态验证码,接下来就是识别静态验证码的事情了. 比如这张动态验证码 他的静态效果就是 下面是随手写的代码,有点混乱 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2

C# 获取动态验证码?

如何获取动态验证码(比如登录验证码,每次访问码值都是不一样的).本来想从cookie上入手但是,每次访问虽然码值不一样,但是后来发现它们的cookie一样的.这个道路就行不通了.目前知道一个解决方案,就是通过WebBrowser获取然后显示的html,1.种方法直接截图:2.将图片元素的DomElement作为参数,方法如下.但是这种方法效率太低..,求高效的方法.结合mshtml.dll. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ComI