生成验证码效果

生成验证码效果

 

 

 

ValidateCode.java 验证码生成类

Java代码  

  1. package cn.dsna.util.images;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics2D;
  5. import java.awt.image.BufferedImage;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.OutputStream;
  9. import java.util.Random;
  10. import javax.imageio.ImageIO;
  11. /**
  12. * 验证码生成器
  13. * @author dsna
  14. *
  15. */
  16. public class ValidateCode {
  17. // 图片的宽度。
  18. private int width = 160;
  19. // 图片的高度。
  20. private int height = 40;
  21. // 验证码字符个数
  22. private int codeCount = 5;
  23. // 验证码干扰线数
  24. private int lineCount = 150;
  25. // 验证码
  26. private String code = null;
  27. // 验证码图片Buffer
  28. private BufferedImage buffImg=null;
  29. private char[] codeSequence = { ‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘, ‘H‘, ‘I‘, ‘J‘,
  30. ‘K‘, ‘L‘, ‘M‘, ‘N‘,  ‘P‘, ‘Q‘, ‘R‘, ‘S‘, ‘T‘, ‘U‘, ‘V‘, ‘W‘,
  31. ‘X‘, ‘Y‘, ‘Z‘,  ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘ };
  32. public  ValidateCode() {
  33. this.createCode();
  34. }
  35. /**
  36. *
  37. * @param width 图片宽
  38. * @param height 图片高
  39. */
  40. public  ValidateCode(int width,int height) {
  41. this.width=width;
  42. this.height=height;
  43. this.createCode();
  44. }
  45. /**
  46. *
  47. * @param width 图片宽
  48. * @param height 图片高
  49. * @param codeCount 字符个数
  50. * @param lineCount 干扰线条数
  51. */
  52. public  ValidateCode(int width,int height,int codeCount,int lineCount) {
  53. this.width=width;
  54. this.height=height;
  55. this.codeCount=codeCount;
  56. this.lineCount=lineCount;
  57. this.createCode();
  58. }
  59. public void createCode() {
  60. int x = 0,fontHeight=0,codeY=0;
  61. int red = 0, green = 0, blue = 0;
  62. x = width / (codeCount +2);//每个字符的宽度
  63. fontHeight = height - 2;//字体的高度
  64. codeY = height - 4;
  65. // 图像buffer
  66. buffImg = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);
  67. Graphics2D g = buffImg.createGraphics();
  68. // 生成随机数
  69. Random random = new Random();
  70. // 将图像填充为白色
  71. g.setColor(Color.WHITE);
  72. g.fillRect(0, 0, width, height);
  73. // 创建字体
  74. ImgFontByte imgFont=new ImgFontByte();
  75. Font font =imgFont.getFont(fontHeight);
  76. g.setFont(font);
  77. for (int i = 0; i < lineCount; i++) {
  78. int xs = random.nextInt(width);
  79. int ys = random.nextInt(height);
  80. int xe = xs+random.nextInt(width/8);
  81. int ye = ys+random.nextInt(height/8);
  82. red = random.nextInt(255);
  83. green = random.nextInt(255);
  84. blue = random.nextInt(255);
  85. g.setColor(new Color(red, green, blue));
  86. g.drawLine(xs, ys, xe, ye);
  87. }
  88. // randomCode记录随机产生的验证码
  89. StringBuffer randomCode = new StringBuffer();
  90. // 随机产生codeCount个字符的验证码。
  91. for (int i = 0; i < codeCount; i++) {
  92. String strRand = String.valueOf(codeSequence[random.nextInt(codeSequence.length)]);
  93. // 产生随机的颜色值,让输出的每个字符的颜色值都将不同。
  94. red = random.nextInt(255);
  95. green = random.nextInt(255);
  96. blue = random.nextInt(255);
  97. g.setColor(new Color(red, green, blue));
  98. g.drawString(strRand, (i + 1) * x, codeY);
  99. // 将产生的四个随机数组合在一起。
  100. randomCode.append(strRand);
  101. }
  102. // 将四位数字的验证码保存到Session中。
  103. code=randomCode.toString();
  104. }
  105. public void write(String path) throws IOException {
  106. OutputStream sos = new FileOutputStream(path);
  107. this.write(sos);
  108. }
  109. public void write(OutputStream sos) throws IOException {
  110. ImageIO.write(buffImg, "png", sos);
  111. sos.close();
  112. }
  113. public BufferedImage getBuffImg() {
  114. return buffImg;
  115. }
  116. public String getCode() {
  117. return code;
  118. }
  119. }

ImgFontByte.java

Java代码  

  1. package cn.dsna.util.images;
  2. import java.io.ByteArrayInputStream;
  3. import java.awt.*;
  4. /**
  5. * ttf字体文件
  6. * @author dsna
  7. *
  8. */
  9. public class ImgFontByte {
  10. public Font getFont(int fontHeight){
  11. try {
  12. Font baseFont = Font.createFont(Font.TRUETYPE_FONT, new ByteArrayInputStream(hex2byte(getFontByteStr())));
  13. return baseFont.deriveFont(Font.PLAIN, fontHeight);
  14. } catch (Exception e) {
  15. return new Font("Arial",Font.PLAIN, fontHeight);
  16. }
  17. }
  18. private  byte[] hex2byte(String str) {
  19. if (str == null)
  20. return null;
  21. str = str.trim();
  22. int len = str.length();
  23. if (len == 0 || len % 2 == 1)
  24. return null;
  25. byte[] b = new byte[len / 2];
  26. try {
  27. for (int i = 0; i < str.length(); i += 2) {
  28. b[i / 2] = (byte) Integer
  29. .decode("0x" + str.substring(i, i + 2)).intValue();
  30. }
  31. return b;
  32. } catch (Exception e) {
  33. return null;
  34. }
  35. } /**
  36. * ttf字体文件的十六进制字符串
  37. * @return
  38. */
  39. private String getFontByteStr(){ return null;
  40. return str;//字符串太长 在附件中找
  41. }
  42. }

ValidateCodeServlet.java Servlet调用方法

Java代码  

  1. package cn.dsna.util.images;
  2. import java.io.IOException;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8. public class ValidateCodeServlet extends HttpServlet {
  9. private static final long serialVersionUID = 1L;
  10. @Override
  11. protected void doGet(HttpServletRequest reqeust,
  12. HttpServletResponse response) throws ServletException, IOException {
  13. // 设置响应的类型格式为图片格式
  14. response.setContentType("image/jpeg");
  15. //禁止图像缓存。
  16. response.setHeader("Pragma", "no-cache");
  17. response.setHeader("Cache-Control", "no-cache");
  18. response.setDateHeader("Expires", 0);
  19. HttpSession session = reqeust.getSession();
  20. ValidateCode vCode = new ValidateCode(120,40,5,100);
  21. session.setAttribute("code", vCode.getCode());
  22. vCode.write(response.getOutputStream());
  23. }
  24. /**
  25. * web.xml 添加servlet
  26. <servlet>
  27. <servlet-name>validateCodeServlet</servlet-name>
  28. <servlet-class>cn.dsna.util.images.ValidateCodeServlet</servlet-class>
  29. </servlet>
  30. <servlet-mapping>
  31. <servlet-name>validateCodeServlet</servlet-name>
  32. <url-pattern>*.images</url-pattern>
  33. </servlet-mapping>
  34. 在地址栏输入XXX/dsna.images 测试
  35. */
  36. }

测试类

ValidateCodeTest.java

Java代码  

  1. package cn.dsna.util.images;
  2. import java.io.IOException;
  3. import java.util.Date;
  4. public class ValidateCodeTest {
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. ValidateCode vCode = new ValidateCode(120,40,5,100);
  10. try {
  11. String path="D:/t/"+new Date().getTime()+".png";
  12. System.out.println(vCode.getCode()+" >"+path);
  13. vCode.write(path);
  14. } catch (IOException e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. }

web.xml 配置

Xml代码  

  1. <servlet>
  2. <servlet-name>validateCodeServlet</servlet-name>
  3. <servlet-class>cn.dsna.util.images.ValidateCodeServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6. <servlet-name>validateCodeServlet</servlet-name>
  7. <url-pattern>*.images</url-pattern>
  8. </servlet-mapping>
时间: 2024-12-07 18:23:28

生成验证码效果的相关文章

php图形图像处理之生成验证码

\(^o^)/~ 现在网上越来越离不开验证码了,不知道小伙伴们知不知利用php的GD库就可以生成验证码,Σ(⊙▽⊙"a ...... 首先介绍几个需要用的函数. 1.imagesetpixel() 这个函数可以进行像素点的绘制,在验证码中,我们称之为“噪点”,简直是一个神器.不知道小伙伴有没有想起来验证码上的点点呢,就是用这个函数生成的. 2.str_shuffle() 利用这个打乱字符串,然后利用substr()截取给定的位数,就可以生成一个随机字符串啦. 实例: 1 <?php 2 3

用python生成验证码图片

除了配置好的python环境外,还需要配有python中的PIL库,这是python中专门用来处理图片的库.用传统的pip install 方法或者下载源码 python setup.py install 方法安装该库,很可能会报错(视运行环境不同).可以采用以下方法: 1.下载安装包URL:http://www.pythonware.com/products/pil/index.htm,要下载支持全平台的. 2.解压缩: tar –zxv –f Imaging-1.1.7.tar.gz 3.进

SpringMvc项目中使用GoogleKaptcha 生成验证码

SpringMvc项目中使用GoogleKaptcha 生成验证码 前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 官方提供的pom应该是 <dependency> <groupId>com.google.code.kaptcha</groupId> <artifactId>kaptcha</arti

servlet生成验证码验证的实现

servlet中的方法实现代码: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.PrintWriter; import java.util.Random; import javax.servlet.ServletException; imp

(一)【转】asp.net mvc生成验证码

网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录.留言等提交信息到服务器端处理的页面中. 在ASP.NET网站中应用验证码是很容易的,网上有很多的解决方案.最近在做一个OA项目,因系统采用的ASP.NET MVC框架,同样在登录页中需用到验证码,故需将原来在ASP.NET网站中使用的验证码移植到ASP.NET MVC中. 原ASP.NET网站用来生成验证码的类文件ValidateCode.

转】使用kaptcha生成验证码

原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4221848.html 感谢! kaptcha是一个简单好用的验证码生成工具,通过配置,可以自己定义验证码大小.颜色.显示的字符等等.下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验. 一.搭建测试环境 1.1.创建Web测试项目 新建一个Web项目,并将kaptcha-2.3.2.jar放在项目的WEB-INF/lib目录下,如下图所示: 1.2.在web.xml文件配置生成验证

spring mvc框架下使用kaptcha生成验证码

1.下载jar包并导入. kaptcha-2.3.2.jar 2.spring 配置文件 applicationContext.xml. <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> <property name="config"> <bean class="com.google.code.ka

android 自定义view实现验证码效果(一)

此博客来自:http://blog.csdn.net/lmj623565791/article/details/24252901,感谢博客的无私奉献,在这拿来自己学习下. 自定义控件一直对我来说都比较恐怖,就此有时间好好学习下, 我们知道一个View对象要经过onMeasure()测量 ,onLayout()计算大小,onDraw()到屏幕上,然后根据你的需求看需要那方面就使用了,这是最简单的自定义view,先从最简单的做起 新建一个项目customview1 第一步:先自定义view的属性,首

ASP.NET MVC5 生成验证码

1 ValidateCode.cs using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; namespace Common { /// <summary> /// 生成验证码的类 /// </summary> public class ValidateCode { public ValidateCode()