您的位置:首页 > 编程语言 > Java开发

JAVA生成简单的验证码

2010-10-05 18:08 330 查看
最近在做一个小型项目,中间使用到了验证码,又看到了很多新手朋友都在找验证码,所以今天把代码分享出来。
本来代码里面一点注释都没有,时间紧迫,匆匆忙忙的加了一点注释。
本来是一个WEB上面的验证码,考虑到调试不方便,改成了窗体上面的。
把代码下面的代码复制到记事本里,JAVAC 编译一下就可以运行了。
这个验证码只是生成4位的数字,如果需要生成字母加数字,可以自己修改。

package test;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Toolkit;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Random;

import javax.swing.JFrame;

/**
*
* @author Peng
*
*/

public class CheckCode extends JFrame {

private static Random random = new Random();

private int width = 53; //验证码宽度

private int height =25; //验证码高度

private int font_size = 20; //验证码颜色

private int x = 100; //验证码所在窗体X坐标

private int y = 100; //验证码所在窗体Y坐标

private int jam = 4; //干扰元素 建议使用 4~7 之间的数字

private String code = ""; //保存验证码

/**

* 初始化窗体信息

*/

public CheckCode(){

super("test");

setVisible(true);

setBounds((Toolkit.getDefaultToolkit().getScreenSize().width-300)/2, (Toolkit.getDefaultToolkit().getScreenSize().height-300)/2, 300, 200);

setDefaultCloseOperation(EXIT_ON_CLOSE);

addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

repaint();

}

});

}

/**

* 获得随机颜色

* @return 随即颜色

*/

public Color getRandomColor(){

int R=random.nextInt(255),G=random.nextInt(255),B=random.nextInt(255);

return new Color(R,G,B);

}

/**

* 获得验证码

* @return 验证码

*/

public String getRandomString(){

int num = random.nextInt(9);

code = num+"";

return num+"";

}

/**

* 绘画验证码

* @param g

*/

public void checkCode(Graphics g){

drawBorder(g);

drawCode(g);

drawJam(g);

}

/**

* 绘画边框和背景

* @param g

*/

public void drawBorder(Graphics g){

Color gc = g.getColor();

g.setColor(Color.WHITE);

g.fillRect(x, y, width, height);

g.setColor(Color.BLACK);

g.drawRect(x, y, width, height);

g.setColor(gc);

}

/**

* 绘画验证码内容

* @param g

*/

public void drawCode(Graphics g){

Color gc = g.getColor();

for(int i=0;i<4;i++){

g.setColor(getRandomColor());

g.setFont(new Font("宋体",Font.BOLD,font_size));

g.drawString(getRandomString(), x+5+(i*12), y+font_size);

}

g.setColor(gc);

}

/**

* 绘画干扰元素

* @param g

*/

public void drawJam(Graphics g){

Color gc = g.getColor();

for(int i=0;i<jam;i++){

g.setColor(getRandomColor());

g.drawLine(x+random.nextInt(width), y+random.nextInt(height), x+random.nextInt(width), y+random.nextInt(height));

}

g.setColor(gc);

}

@Override

public void paint(Graphics g) {

Color c = g.getColor();

g.drawString("看不清?单机窗体更换验证码", 30, 50);

checkCode(g);

g.setColor(c);

}

public static void main(String[] args) {

new CheckCode();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: