2019独角兽企业重金招聘Python工程师标准>>>

package com.bonc.security.login.action;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.bonc.javax.struts.BONCExAction;
import com.bonc.javax.struts.BONCModel;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;/*** * Title:专题分析>>业务异动监控>>3G业务>>渠道监控>>Iphone售点销量 Description:Iphone售点销量 Copyright:* Copyright (c) 2013 Company: 北京东方国信公司* * @author pcl* @version 1.0*/
public class GetVerifycodeAction extends BONCExAction {public static final char[] chars = { '2', '3', '4', '5', '6', '7', '8','9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M','N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };public static Random random = new Random();/*** 产生4位随机数0,o,1,i相似字符除外* * @return*/public static String getRandom() {StringBuffer buffer = new StringBuffer();for (int i = 0; i < 4; i++) {buffer.append(chars[random.nextInt(chars.length)]);}return buffer.toString().toUpperCase();}/*** 产生随机颜色* * @return*/public static Color getRandomColor() {Color color = new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255));return color;}/*** 随机产生颜色的反色* * @param c* @return*/public static Color getReverseColor(Color c) {Color color = new Color(255 - c.getRed(), 255 - c.getGreen(),255 - c.getBlue());return color;}@Overridepublic BONCModel control(ActionMapping arg0, ActionForm arg1,HttpServletRequest arg2, HttpServletResponse arg3, BONCExAction arg4) {// TODO Auto-generated method stubreturn null;}@Overridepublic ActionForward forward(ActionMapping arg0, ActionForm arg1,HttpServletRequest arg2, HttpServletResponse arg3, Object arg4) {String param=arg2.getParameter("isVerify");if("1".equals(param)){String verifycode=arg2.getParameter("verifycode") == null ? "" : arg2.getParameter("verifycode").trim().toUpperCase();String randomString =(String) arg2.getSession().getAttribute("randomString");arg3.setContentType("application/json;charset=UTF-8");if(verifycode.equals(randomString)){try {arg3.getWriter().write("1");} catch (IOException e) {e.printStackTrace();}}else{try {arg3.getWriter().write("0");} catch (IOException e) {e.printStackTrace();}}return null;}else{// TODO Auto-generated method stub// 设置输出类型为图片arg3.setContentType("image/jpeg");String randomString = getRandom();arg2.getSession(true).setAttribute("randomString", randomString);int width = 60, height = 20;Color randomColor = getRandomColor();Color reverseColor = getReverseColor(randomColor);// 创建一个颜色图片BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);// 获取绘图对象Graphics2D g = bi.createGraphics();// 设置颜色g.setColor(randomColor);// 绘制背景g.fillRect(0, 0, width, height);// 设置反射色g.setColor(reverseColor);// 设置字体g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16));// 绘制字符g.drawString(randomString, 5, 15);// 绘制噪音点 最多100个for (int i = 0, n = random.nextInt(40); i < n; i++) {g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);}try {ServletOutputStream out = arg3.getOutputStream();// 转成JPEG格式JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);// 对图片编码encoder.encode(bi);// 输出到客户端out.flush();out.close();} catch (Exception e) {e.printStackTrace();}return null;}}
}

转载于:https://my.oschina.net/u/1182828/blog/170554

struts1生成验证码相关推荐

  1. python 生成验证码

    import randomfrom PIL import Image, ImageDraw, ImageFont, ImageFilter _letter_cases = "abcdefgh ...

  2. 使用kaptcha生成验证码

    2019独角兽企业重金招聘Python工程师标准>>> kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用k ...

  3. Python图片处理PIL/pillow/生成验证码/出现KeyError: 和The _imagingft C module is not installed...

    近期在用Python开发自己的博客.须要用到Python生成验证码,当然肯定要用到Python的图形处理库PIL,由于我用的是windows. 所以在安装好pil之后就開始写,就依照题目所说出现了Th ...

  4. 生成验证码点击可刷新

    我把生成验证码与生成验证码图片封装成一个静态方法,放到ValidateCode类里 /// <summary> /// 生成验证码的类 /// </summary> publi ...

  5. GDI+ 中发生一般性错误(生成验证码时出现的错误)

    我在生成验证码时,出现这样的错误:GDI+ 中发生一般性错误. 怎么解决? 转载于:https://www.cnblogs.com/happyangle/archive/2008/06/11/1217 ...

  6. Java Web学习总结(22)——使用kaptcha生成验证码

    kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验. 一.搭建测试环境 ...

  7. 【转】C#生成验证码

    使用C#生成验证码图片,然后在网页中直接使用,很方便的用法. using System; using System.Drawing; using System.Drawing.Imaging; usi ...

  8. 转: 通过Servlet生成验证码图片

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(九)-- 通过Servlet生成验证码图片 一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedIma ...

  9. python制作验证码_Python编写生成验证码的脚本的教程

    在web开发中经常用到验证码,为了防止机器人注册或者恶意登陆和查询等,作用不容小觑 但是验证码其实不是一个函数就能搞定的,它需要生成图片和水印,其实每种语言都有相关的函数生成图片和文字水印.包括我熟悉 ...

最新文章

  1. 语雀图片与七牛云之间的迁移同步
  2. 2020年人工神经网络第二次作业-参考答案第四题
  3. 在使用 interface 声明一个接口时,只可以使用那个修饰符修饰该接口?
  4. 【解决方案】QT读写文件
  5. Spring Boot文档阅读笔记-Creating Asynchronous Methods解析
  6. 视觉推理新杀器!英特尔新一代VPU性能翻10倍,反超英伟达
  7. typora工具的使用方法-一款非常适合程序员的工具
  8. yolov5 解码使用GPU进行加速
  9. 下载 针式PKM V9.08 版
  10. DC域【软件分发】失败的处理手段
  11. wpa_supplicant使用
  12. CSS——网易云音乐首页之榜单区域的实现
  13. java进阶(9)——JVM jar包加载顺序
  14. OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法
  15. 微信小程序之实现到商品列表跳转商品详情页
  16. 【原创】C#玩高频数字彩快3的一点体会
  17. html圆圈里边有个c,三个c标志可以扯掉-图标含义?一个圆圈里面有三个C代表什么含义 – 手机爱问...
  18. 工程伦理慕课答案(带题目供复习)
  19. 比xgboost强大的LightGBM:调参指南(带贝叶斯优化代码)
  20. JAVA常见的递归算法问题及相关面试题

热门文章

  1. lzg_ad:使用Virtual PC 部署和测试XP Embedded 发布镜像
  2. C# 3.0 入门系列(一)
  3. 湖北大数据采集平台的应用价值及领域,数道云
  4. 驰骋工作流引擎设计系列07 线性流程节点运动(发送)设计
  5. 转义符,re模块,rangdom随机数模块,
  6. 时序列数据库武斗大会之 TSDB 名录 Part 1
  7. Stack Overflow requires external JavaScript from another domain, which is blocked or failed to load.
  8. 使用jQuery来创建Silverlight
  9. 汇总c#.net常用函数和方法集
  10. cnblogs反对按钮点击测试