swing验证码

/**
 *
 */
import java.awt.*;
import java.awt.image.*;
import java.util.*;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

/**
 * @author WenLiang
 */
public class ImageCode {

  public String sRand = "";

  public String sgbRand = "";

  public Color getRandColor(int fc, int bc) { //给定范围获得随机颜色
     Random random = new Random();

  if (fc > 255)

  fc = 255;

  if (bc > 255)

  bc = 255;

  int r = fc + random.nextInt(bc - fc);

  int g = fc + random.nextInt(bc - fc);

  int b = fc + random.nextInt(bc - fc);

  return new Color(r, g, b);

  }

  public BufferedImage creatImage() {

 // 在内存中创建图象

  int width = 60, height = 20;

  BufferedImage image = new BufferedImage(width, height,

  BufferedImage.TYPE_INT_RGB);

 // 获取图形上下文

  Graphics g = image.getGraphics();

 //生成随机类

  Random random = new Random();

 // 设定背景色

  g.setColor(getRandColor(100, 250));

  g.fillRect(0, 0, width, height);

 //设定字体

  g.setFont(new Font("Comic Sans MS", Font.PLAIN, 18));

 //画边框

 //g.setColor(new Color(0,0,0));

 //g.drawRect(0,0,width-1,height-1);

 // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到

  g.setColor(getRandColor(160, 200));

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

  int x = random.nextInt(width);

  int y = random.nextInt(height);

  int xl = random.nextInt(12);

  int yl = random.nextInt(12);

  g.drawLine(x, y, x + xl, y + yl);

  }

 // 取随机产生的认证码(4位数字)

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

  String rand = String.valueOf(random.nextInt(10));

  sRand += rand;

 // 将验证码显示到图象中

  g.setColor(new Color(20 + random.nextInt(110),

  20 + random.nextInt(110),

  20 + random.nextInt(110)));

  g.drawString(rand, 13 * i + 6, 16);

  }

 // 图象生效

  g.dispose();

  return image;

  }

  public static void main(String[] args) {

   ImageCode img = new ImageCode();
    JFrame jf = new JFrame();
    jf.setSize(200,300);
   
    Container ct = jf.getContentPane();
    ImageIcon ii = new ImageIcon(img.creatImage());
    JLabel jl = new JLabel(ii);
    ct.add(jl);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.setVisible(true);
   }
 

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值