//publicstatic final String VERIFY_CODES="23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
获取验证码
//get codepublicvoidgetCode(HttpServletResponse response, HttpSession session)throws IOException {
int width =63;
int height =37;
Random random =newRandom();// 设置response头信息 禁止缓存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
BufferedImage image =newBufferedImage(width, height,1);// 生成缓冲区image类
Graphics g = image.getGraphics();// 产生image类的Graphics用于绘制操作// Graphics类的样式
g.setColor(this.getRandColor(200,250));
g.setFont(newFont("Times New Roman",0,24));
g.fillRect(0,0, width, height);// 绘制干扰线for(int i =0; i <100; i++){
g.setColor(this.getRandColor(130,200));
int x = random.nextInt(width);
int y = random.nextInt(height);
int x1 = random.nextInt(12);
int y1 = random.nextInt(12);
g.drawLine(x, y, x + x1, y + y1);}
String strCode =generateVerifyCode(4);for(int i =0; i < strCode.length(); i++){
String rand = strCode.substring(i,i+1);
g.setColor(newColor(20+ random.nextInt(110),20+ random.nextInt(110),20+ random.nextInt(110)));
g.drawString(rand,13* i +6,28);}// 将字符转为小写 保存到session中用于前端的验证
session.setAttribute("Code", strCode.toLowerCase());
g.dispose();
ImageIO.write(image,"JPEG", response.getOutputStream());
response.getOutputStream().flush();}
创建颜色
//Create a color
Color getRandColor(int fc, int bc){
Random random =newRandom();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);returnnewColor(r, g, b);}
使用系统默认字符源生成验证码
//Generate the captcha using the system default character source//verifySize Captcha lengthpublicstatic String generateVerifyCode(int verifySize){returngenerateVerifyCode(verifySize,VERIFY_CODES);}
使用指定源生成验证码
//Generates the captcha using the specified sourcepublicstatic String generateVerifyCode(int verifySize, String sources){if(sources ==null|| sources.length()==0){
sources =VERIFY_CODES;}
int codesLen = sources.length();
Random rand =newRandom(System.currentTimeMillis());
StringBuilder verifyCode =newStringBuilder(verifySize);for(int i =0; i < verifySize; i++){
verifyCode.append(sources.charAt(rand.nextInt(codesLen -1)));}return verifyCode.toString();}