博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp动态生成验证码的类
阅读量:5248 次
发布时间:2019-06-14

本文共 3019 字,大约阅读时间需要 10 分钟。

import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.util.Random;import javax.imageio.ImageIO;import javax.imageio.stream.ImageOutputStream;public class RandomNumUtil {    private ByteArrayInputStream image;//图像       private String str;//验证码              private RandomNumUtil(){           init();//初始化属性       }            public static RandomNumUtil Instance(){           return new RandomNumUtil();       }            public ByteArrayInputStream getImage(){           return this.image;       }            public String getString(){           return this.str;       }              private void init() {           //       在内存中创建图象           int width=85, height=20;           BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);           //       获取图形上下文           Graphics g = image.getGraphics();           //      生成随机类           Random random = new Random();           //       设定背景色           g.setColor(getRandColor(200,250));           g.fillRect(0, 0, width, height);           //      设定字体           g.setFont(new Font("Times New Roman",Font.PLAIN,18));           //       随机产生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);           }           //       取随机产生的认证码(6位数字)          String sRand="";        for (int i=0;i<6;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);        }        //赋值验证码        this.str=sRand;                 //图象生效           g.dispose();           ByteArrayInputStream input=null;           ByteArrayOutputStream output = new ByteArrayOutputStream();           try{               ImageOutputStream imageOut = ImageIO.createImageOutputStream(output);               ImageIO.write(image, "JPEG", imageOut);               imageOut.close();               input = new ByteArrayInputStream(output.toByteArray());           }catch(Exception e){               System.out.println("验证码图片产生出现错误:"+e.toString());           }                      this.image=input;     }            private 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);      }}

转载于:https://www.cnblogs.com/sallon/archive/2012/08/15/2640070.html

你可能感兴趣的文章
Spring详解(一)------概述
查看>>
idea进行断点快捷键
查看>>
美国留学:什么是“蓝带”(blueribbon)中学
查看>>
Python连接mongodb
查看>>
PHP数据库的基本操作
查看>>
同步锁/互斥锁
查看>>
以Append方式打开文件,设置偏移量无效
查看>>
Django认证系统
查看>>
好文一读!分析社交网站用户的十大心理怪习
查看>>
小程序tabbar和navigator一起使用点不动
查看>>
1024 科学计数法 (20 分)
查看>>
并查集(模板) 洛谷3367
查看>>
BZOJ 4939: [Ynoi2016]掉进兔子洞(莫队+bitset)
查看>>
python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)...
查看>>
python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
查看>>
小程序——总结关于配置tabBar的坑
查看>>
java递归
查看>>
区块链网站
查看>>
「LeetCode」合并两个有序数组(JAVA实现)
查看>>
Linux内核参数基础优化
查看>>