import java.awt.*;//验证码
import java.awt.event.*;
import java.util.Random;
public class TsetAWT
{
public static void main(String[] args)
{
final Frame frame = new Frame("验证码");
final Panel panel = new MyPanel();//创建Canvas对象
frame.add(panel);
frame.setSize(200,100);
//将fame窗口居中
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class MyPanel extends Panel
{
public void paint(Graphics g)
{
int width = 160;//定义验证码图片的宽度
int height = 40;//定义验证码图片的高度
g.setColor(Color.LIGHT_GRAY);//设置上下文颜色
g.fillRect(0,0,width,height);//填充验证码背景
g.setColor(Color.BLACK);//设置上下文颜色
g.drawRect(0,0,width-1,height-1);//绘制边框
//绘制干扰点
Random r = new Random();
for(int i = 0; i < 100; i++)
{
int x = r.nextInt(width)-2;
int y = r.nextInt(height)-2;
g.drawOval(x,y,2,2);
}
g.setFont(new Font("黑体",Font.BOLD,30));//设置验证码字体
g.setColor(Color.BLUE);//设置验证码颜色
//产生随机验证码
char[] chars = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 4; i++)
{
int pos = r.nextInt(chars.length);
char c = chars[pos];
sb.append(c+" ");
}
g.drawString(sb.toString(),20,30);//写入验证码
}
}
此处不足在于点击验证码时验证码不改变,
放大和缩小窗口时验证码会改变,可以定义一个char数组,
只读取数组的最后四位便是验证码的值
改善:
完成了判断输入验证码是否正确:
//产生随机验证码
char[] chars = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
StringBuilder sb = new StringBuilder();
char[] array = new char[4];
for(int i = 0; i < 4; i++)
{
int pos = r.nextInt(chars.length);
char c = chars[pos];
sb.append(c+" ");
array[i] = c;
}
System.out.println(array);
g.drawString(sb.toString(),20,30);//写入验证码
Scanner s = new Scanner(System.in);
String str = s.next();
char[] array1 = str.toCharArray();
String s_array = String.valueOf(array);;
String s_array1 = String.valueOf(array1);
if(s_array.equals(s_array1))
{
System.out.println("验证码输入正确");
}
else
{
System.out.println("验证码输入错误");
}