标签:
防止恶意攻击,机器人注册,暴力破解。 *Java:一处编译,到处运行。 ×自定义;用AWT(Abstract Window Toolkits,依赖本地的类库,平台依赖性)实现,有点费劲 >用例:VerifyCode //验证码:实体类 public class VerifyCode(){ //验证码矩形宽高 private int width=70; private int hight=35; //随机数,下面有用 private Random random=new Random(); //验证码中的字体类型 private String[] fontNames={}; //矩形框背景色,默认为白色 private Color bgColor=new Color(255,255,255); private String codes=""; //验证码文本,此处为字符串 private String text; //画3条线,随机长度(范围自定义),颜色为蓝色 public void drawLine(BufferedImage image){ //画线条数据 int num=3; //得到2维制图工具 Graphics2D g2=image.getGraphics(); //循环画3条线 for(int i=0;i<num;i++){ //分别得到画线两个点的坐标 int x1=random.nextInt(width); int y1=random.nextInt(height); int x2=random.nextInt(width); int y2=random.nextInt(height); //设置画笔为1.5px框 g2.setStroke(new BasicStroke(1.5F)); //设置线条夜色为蓝色 g2.setColor(Color.blue); //划线 g2.drawLine(x1,y2,x2,y2); } } //创建缓冲区图片 public BufferedImage createImage(){ //创建缓冲区图片 BufferedImage image=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); //得到2维制图工具 Graphics2D g2=(Graphics2D)image.getGraphics(); //划线 g2.fillRect(0,0,width,height); return image; } //获取图片接口,其中绘制4个字符串,设置字体,颜色。 public BufferedImage getImage(){ //创建缓冲区图片 BufferedImage image=createImage(); //得到制图工具 Graphics2D g2=image.getGraphics(); //设置字符串建立者(效率高) StringBuilder sb=new StringBuilder(); //画4个字符串 for(int i=0;i<4;i++){ //设置要绘制的字符 String str=getRandomChar(); //追加字符 sb.append(str); //设置线条字体 g2.setFont(getRandomFont()); //设置线条颜色 g2.setColor(getRandomColor()); //基线点横坐标 int x=i*1.0F*width/4; //基线点纵坐标 int y=height-5; //画4个字符 g2.drawString(str,x,y); } //text的setter this.text=sb.toString(); drawLine(image); } //供外部访问的接口,得到text public String getText(){ return text; } //得到随机字体 public Font getRandomFont(){ // int index=random.nextInt(fontNames.length); //字体名字 String fontName=fontNames[index]; //字体样式 int style=random.nextInt(4); //字体大小 int size=random.nextInt(5)+24; return new Font(fontName,style,size); } //获得随机字符串 public char getRandomChar(){ int index=random.nextInt(); return codes.charat(index); } //获得随机组合色 public Color randomColor(){ int red=random.nextInt(150); int green=random.nextInt(150); int blue=random.nextInt(150); // return new Color(red,green,blue); } }
标签:
原文地址:http://www.cnblogs.com/liaowanzhong/p/4781007.html