Servlet 生成验证码方法实例代码。
Servlet方法:
- public class ValidateCodeServlet extends BaseServlet {
- private static final String CONTENT_TYPE = ”image/jpeg”;
- /**
- * 数字图像认证系统 随机产生一个四位的数组,转换成图象输出 产生的数组保存在Session中,绑定名字“rand”
- *
- * @param super.getRequest()
- * @param super.getResponse()
- */
- public void createImage(HttpServletRequest request,
- HttpServletResponse response)
- {
- response.setContentType(CONTENT_TYPE);
- response.setHeader(“Pragma”,”No-cache”); // 设置页面不缓存
- response.setHeader(“Cache-Control”,”no-cache”);
- response.setDateHeader(“Expires”,0);
- try {
- request.setCharacterEncoding(“GBK”);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- HttpSession session = request.getSession();
- // 产生四位随机码,写入session
- //String chose = ”0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”;
- //去掉容易混淆的字母:0,1,o,I,l,O
- String chose = ”23456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ”;
- char display[] = { ’0′, ’ ’, ’0′, ’ ’, ’0′, ’ ’, ’0′ }, ran[] = { ’0′, ’0′, ’0′, ’0′ }, temp;
- Random rand = new Random();
- for (int i = 0; i < 4; i++)
- {
- temp = chose.charAt(rand.nextInt(chose.length()));
- display[i * 2] = temp;
- ran[i] = temp;
- }
- String strRandom = String.valueOf(display); // 与String.valueOf(ran)是相同地
- String sRand = request.getParameter(“rand”); // 通过传递参数来设置验证码在session里的名字
- if (sRand == null)
- {
- sRand = ”rand”;
- }
- session.setAttribute(sRand,String.valueOf(ran));
- // 生成图像,返回到页页上
- int width = 70, height = 26;
- BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- Graphics g = image.getGraphics();
- // 以下填充背景颜色
- g.setColor(Color.white);
- g.setColor(getRandomColor(200,250));
- // 设置边框
- g.fillRect(0,0,width,height);
- // 设置字体颜色、字体
- g.setColor(Color.black);
- g.drawRect(0,0,width - 1,height - 1); // 字要比图像边框小一点
- // 将认证码写入图像
- g.setColor(Color.black);
- g.setFont(new Font(“Arial”, Font.PLAIN, 18));
- g.drawString(strRandom,1,18);
- // 图像生效
- g.dispose();
- // 输出图像
- try
- {
- ImageIO.write(image,”JPEG”,response.getOutputStream());
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- }
- /**
- * 生成随机颜色
- *
- * @param fc
- * 前景色
- * @param bc
- * 背景色
- *
- * @return Color对象,此Color对象是RGB形式的。
- */
- public Color getRandomColor(int fc, int bc)
- {
- Random random = new Random();
- if (fc > 255)
- {
- fc = 200;
- }
- 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);
- return new Color(r, g, b);
- }
- }
页面:
- <script type=”text/javascript”>
- jQuery(function(){
- jQuery(‘#urMobile’).focus();
- //为验证码图片绑定单击事件
- jQuery(“#imagepic”).click(function(){
- this.src=”<%=path%>/ValidateCodeServlet.do?method=createImage×tamp=”+Math.random();
- });
- });
- </script>
- <tr>
- <td align=”right” height=”40″>
- 验证码:
- </td>
- <td align=”left”>
- <input type=”text” size=”7″ name=”code” id=”code”/>
- <img src=”<%=path%>/ValidateCodeServlet.do?method=createImage” id=”imagepic”
- width=”75″ height=”24″ maxlength=”4″ title=”点击图片,更换验证码”/>
- </td>
- </tr>
效果图: