全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java生成图形验证码工具类

生成验证码效果

ValidateCode.java 验证码生成类

package cn.dsna.util.images; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics2D; 
import java.awt.image.BufferedImage; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Random; 
import javax.imageio.ImageIO; 
/** 
 * 验证码生成器 
 * @author dsna 
 * 
 */ 
public class ValidateCode { 
 // 图片的宽度。 
 private int width = 160; 
 // 图片的高度。 
 private int height = 40; 
 // 验证码字符个数 
 private int codeCount = 5; 
 // 验证码干扰线数 
 private int lineCount = 150; 
 // 验证码 
 private String code = null; 
 // 验证码图片Buffer 
 private BufferedImage buffImg=null; 
 private char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 
   'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 
   'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; 
 public ValidateCode() { 
  this.createCode(); 
 } 
 /** 
  * 
  * @param width 图片宽 
  * @param height 图片高 
  */ 
 public ValidateCode(int width,int height) { 
  this.width=width; 
  this.height=height; 
  this.createCode(); 
 } 
 /** 
  * 
  * @param width 图片宽 
  * @param height 图片高 
  * @param codeCount 字符个数 
  * @param lineCount 干扰线条数 
  */ 
 public ValidateCode(int width,int height,int codeCount,int lineCount) { 
  this.width=width; 
  this.height=height; 
  this.codeCount=codeCount; 
  this.lineCount=lineCount; 
  this.createCode(); 
 } 
 public void createCode() { 
  int x = 0,fontHeight=0,codeY=0; 
  int red = 0, green = 0, blue = 0; 
  x = width / (codeCount +2);//每个字符的宽度 
  fontHeight = height - 2;//字体的高度 
  codeY = height - 4; 
  // 图像buffer 
  buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB); 
  Graphics2D g = buffImg.createGraphics(); 
  // 生成随机数 
  Random random = new Random(); 
  // 将图像填充为白色 
  g.setColor(Color.WHITE); 
  g.fillRect(0, 0, width, height); 
  // 创建字体 
  ImgFontByte imgFont=new ImgFontByte(); 
  Font font =imgFont.getFont(fontHeight); 
  g.setFont(font); 
  for (int i = 0; i < lineCount; i++) { 
   int xs = random.nextInt(width); 
   int ys = random.nextInt(height); 
   int xe = xs+random.nextInt(width/8); 
   int ye = ys+random.nextInt(height/8); 
   red = random.nextInt(255); 
   green = random.nextInt(255); 
   blue = random.nextInt(255); 
   g.setColor(new Color(red, green, blue)); 
   g.drawLine(xs, ys, xe, ye); 
  } 
  // randomCode记录随机产生的验证码 
  StringBuffer randomCode = new StringBuffer(); 
  // 随机产生codeCount个字符的验证码。 
  for (int i = 0; i < codeCount; i++) { 
   String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]); 
   // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。 
   red = random.nextInt(255); 
   green = random.nextInt(255); 
   blue = random.nextInt(255); 
   g.setColor(new Color(red, green, blue)); 
   g.drawString(strRand, (i + 1) * x, codeY); 
   // 将产生的四个随机数组合在一起。 
   randomCode.append(strRand); 
  } 
  // 将四位数字的验证码保存到Session中。 
  code=randomCode.toString();  
 } 
 public void write(String path) throws IOException { 
  OutputStream sos = new FileOutputStream(path); 
   this.write(sos); 
 } 
 public void write(OutputStream sos) throws IOException { 
   ImageIO.write(buffImg, "png", sos); 
   sos.close(); 
 } 
 public BufferedImage getBuffImg() { 
  return buffImg; 
 } 
 public String getCode() { 
  return code; 
 } 
} 

ImgFontByte.java

package cn.dsna.util.images; 
import java.io.ByteArrayInputStream; 
import java.awt.*; 
/** 
 * ttf字体文件 
 * @author dsna 
 * 
 */ 
public class ImgFontByte { 
 public Font getFont(int fontHeight){ 
  try { 
   Font baseFont = Font.createFont(Font.TRUETYPE_FONT, new ByteArrayInputStream(hex2byte(getFontByteStr()))); 
   return baseFont.deriveFont(Font.PLAIN, fontHeight); 
  } catch (Exception e) { 
   return new Font("Arial",Font.PLAIN, fontHeight); 
  } 
 } 
 private byte[] hex2byte(String str) { 
  if (str == null) 
   return null; 
  str = str.trim(); 
  int len = str.length(); 
  if (len == 0 || len % 2 == 1) 
   return null; 
  byte[] b = new byte[len / 2]; 
  try { 
   for (int i = 0; i < str.length(); i += 2) { 
    b[i / 2] = (byte) Integer 
      .decode("0x" + str.substring(i, i + 2)).intValue(); 
   } 
   return b; 
  } catch (Exception e) { 
   return null; 
  } 
 } /** 
 * ttf字体文件的十六进制字符串 
 * @return 
 */ 
 private String getFontByteStr(){ return null; 
  return str;//字符串太长 在附件中找 
} 
} 

ValidateCodeServlet.java Servlet调用方法

package cn.dsna.util.images; 
import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
public class ValidateCodeServlet extends HttpServlet { 
 private static final long serialVersionUID = 1L; 
 @Override 
 protected void doGet(HttpServletRequest reqeust, 
   HttpServletResponse response) throws ServletException, IOException { 
  // 设置响应的类型格式为图片格式 
  response.setContentType("image/jpeg"); 
  //禁止图像缓存。 
  response.setHeader("Pragma", "no-cache"); 
  response.setHeader("Cache-Control", "no-cache"); 
  response.setDateHeader("Expires", 0); 
  HttpSession session = reqeust.getSession(); 
  ValidateCode vCode = new ValidateCode(120,40,5,100); 
  session.setAttribute("code", vCode.getCode()); 
  vCode.write(response.getOutputStream()); 
 } 
/** 
 * web.xml 添加servlet 
 <servlet> 
  <servlet-name>validateCodeServlet</servlet-name> 
  <servlet-class>cn.dsna.util.images.ValidateCodeServlet</servlet-class> 
 </servlet>  
 <servlet-mapping> 
  <servlet-name>validateCodeServlet</servlet-name> 
  <url-pattern>*.images</url-pattern> 
 </servlet-mapping> 
在地址栏输入XXX/dsna.images 测试 
 */ 
} 

 测试类

ValidateCodeTest.java

package cn.dsna.util.images; 
import java.io.IOException; 
import java.util.Date; 
public class ValidateCodeTest { 
 /** 
  * @param args 
  */ 
 public static void main(String[] args) { 
  ValidateCode vCode = new ValidateCode(120,40,5,100); 
  try { 
   String path="D:/t/"+new Date().getTime()+".png"; 
   System.out.println(vCode.getCode()+" >"+path); 
   vCode.write(path); 
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
 } 
} 

web.xml 配置

<servlet> 
 <servlet-name>validateCodeServlet</servlet-name> 
 <servlet-class>cn.dsna.util.images.ValidateCodeServlet</servlet-class> 
</servlet>  
<servlet-mapping> 
 <servlet-name>validateCodeServlet</servlet-name> 
 <url-pattern>*.images</url-pattern> 
</servlet-mapping> 

以上所述是小编给大家介绍的Java生成图形验证码工具类,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# java生成验证码工具类  # java生成图形验证码  # 关于java 图形验证码的解决方法  # Java Web开发之图形验证码的生成与使用方法  # java图形验证码生成工具类 web页面校验验证码  # java web开发之servlet图形验证码功能的实现  # Java实现EasyCaptcha图形验证码的具体使用  # 基于Java实现图形验证码工具类  # Java后端图形验证码的使用实例代码  # 验证码  # 随机数  # 小编  # 在此  # 给大家  # 都将  # 四位  # 太长  # 所述  # 给我留言  # 感谢大家  # 中找  # 格式为  # 疑问请  # 有任何  # blue  # red  # green  # random  # setColor 


相关文章: 建站VPS能否同时实现高效与安全翻墙?  如何解决ASP生成WAP建站中文乱码问题?  如何快速使用云服务器搭建个人网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  如何破解联通资金短缺导致的基站建设难题?  微信小程序 input输入框控件详解及实例(多种示例)  常州自助建站工具推荐:低成本搭建与模板选择技巧  如何通过NAT技术实现内网高效建站?  手机网站制作与建设方案,手机网站如何建设?  如何通过商城免费建站系统源码自定义网站主题?  如何通过智能用户系统一键生成高效建站方案?  C#如何使用XPathNavigator高效查询XML  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  建站之星各版本价格是多少?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  高防服务器租用如何选择配置与防御等级?  网页设计网站制作软件,microsoft office哪个可以创建网页?  南平网站制作公司,2025年南平市事业单位报名时间?  建站之星如何快速生成多端适配网站?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  ,sp开头的版面叫什么?  网站专业制作公司有哪些,做一个公司网站要多少钱?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  建站之星如何一键生成手机站?  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  如何用美橙互联一键搭建多站合一网站?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  高端企业智能建站程序:SEO优化与响应式模板定制开发  制作宣传网站的软件,小红书可以宣传网站吗?  宝塔建站教程:一键部署配置流程与SEO优化实战指南  孙琪峥织梦建站教程如何优化数据库安全?  如何登录建站主机?访问步骤全解析  建站10G流量真的够用吗?如何应对访问高峰?  建站主机是否等同于虚拟主机?  如何在腾讯云服务器上快速搭建个人网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  视频网站制作教程,怎么样制作优酷网的小视频?  威客平台建站流程解析:高效搭建教程与设计优化方案  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  建站之星展会模板:智能建站与自助搭建高效解决方案  建站之星如何助力企业快速打造五合一网站?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  如何通过IIS搭建网站并配置访问权限?  已有域名如何快速搭建专属网站?  深圳 网站制作,深圳招聘网站哪个比较好一点啊? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。