java生成验证图片,很好用的

来源:互联网 发布:python apply async 编辑:程序博客网 时间:2024/05/22 16:07

 
========================jsp==============================
 function changeImg(){
   var a=document.getElementById("mySpan");

//最好在"/ImageServlet?now='+new Date()+'"/>否则有些浏览器支持的不够好
   a.innerHTML='<img align="middle" src="ImageServlet"/>  <a href="#" onclick="changeImg();">看不清,换一张!</a>'; //会复盖“mySpan”位置
  }


<td width="350"><div id="kan"  style="text-align:left;">
  <span id="mySpan"><img alt="点击更换验证码" align="middle" title="点击更换验证码"  src="ImageServlet" /><a  href="#" onclick="changeImg();">看不清,换一张!</a> </span>
  </div></td>
  </tr>

 

=====================web.xml=================
<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>com.e8online2.comm.util.IdentifyingServlet</servlet-class>
  </servlet>
   <servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/ImageServlet</url-pattern>
  </servlet-mapping>


/=======================最后从session中获取原来的验证码与jsp中上传的验证码比较就可以了=================


package com.e8online2.comm.util;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class IdentifyingServlet extends HttpServlet {

 /**
  *
  */
 private static final long serialVersionUID = 1L;

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  response.setContentType("image/jpeg");

  // 给定范围获得随机颜色
  // 设置页面不缓存
  response.setHeader("Pragma", "No-cache");
  response.setHeader("Cache-Control", "no-cache");
  response.setDateHeader("Expires", 0);

  // 在内存中创建图象
  int width = 60, height = 17;
  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  // 获取图形上下文
  Graphics g = image.getGraphics();

  // 生成随机类
  Random random = new Random();

  // 设定背景色
  g.setColor(getRandom(254, 255));
  g.fillRect(0, 0, width, height);

  // 设定字体
  g.setFont(new Font("Cooper Black", Font.PLAIN, 18));

  // 画边框
  // g.setColor(new Color());
  // g.drawRect(0,0,width-1,height-1);

  // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
  g.setColor(getRandom(230, 240));
  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位数字)
  String sRand = "";
  for (int i = 0; i < 4; i++) {
   String rand = String.valueOf(random.nextInt(10));
   sRand += rand;
   // 将认证码显示到图象中
   g.setColor(new Color(100 + random.nextInt(130), 100 + random.nextInt(130), 100 + random.nextInt(130)));// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
   g.drawString(rand, 13 * i + 6, 14);
  }

  // 将认证码存入SESSION
  request.getSession().setAttribute("IdentifyingCode", sRand);

  // 图象生效
  g.dispose();

  // 输出图象到页面
  ImageIO.write(image, "JPEG", response.getOutputStream());
 }

 private Color getRandom(int mixValue, int maxValue) {
  Random random = new Random();
  if (mixValue > 255)
   mixValue = 255;
  if (maxValue > 255)
   maxValue = 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);
  int rgb = mixValue + random.nextInt(maxValue - mixValue);
  return new Color(rgb, rgb, rgb);
 }

}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 试用联盟认证手机号是空号怎么办 系统出新版本不显示更新怎么办 炉石账号封停怎么办 电脑用户名和密码忘了怎么办 黑猴子棒球1闪退怎么办 斗米兼职报名后怎么办 婴儿足跟血检查有异常怎么办 打印机显示脱机使用打印机怎么办 手机刷机后内存变小了怎么办 吃了解毒丹喝酒怎么办 6s更新ios11失败怎么办 苹果6s手机发热怎么办 苹果手机没有描述文件怎么办 电脑玩穿越火线卡怎么办 老电脑又卡又慢怎么办 梦幻之星4花屏怎么办 失业连续好多天睡不着觉怎么办 工业废气排放总量超标怎么办 lol美服更新不了怎么办 支付宝没法实名额度上限怎么办 苹果手机软件被禁止联网了怎么办 幽灵行动荒野黑屏怎么办打开游戏 幽灵行动荒野一点战役就秒退怎么办 华为账号密码忘了怎么办 ios荒野行动掉帧怎么办 一个人心理产生极度恐慌失眠怎么办 肺被子弹打穿了怎么办 文明5完整版锁区怎么办 2017文明5锁区怎么办 软件安装了错误补丁打不开怎么办 小米sd卡不可用怎么办 电视用遥控器关上打不开了怎么办 求生之路2控制台打不开怎么办 比亚迪一键启动没反应怎么办 电动车车头锁开不了怎么办 锁里面卡了东西怎么办 电脑显示器闪屏然后黑屏怎么办 枪火游侠闪退怎么办 欧卡2气压过低怎么办 微信安装包己损坏怎么办 qq超市金币累计满了怎么办