JSP生成验证码
来源:互联网 发布:手机淘宝历史价格查询 编辑:程序博客网 时间:2024/04/30 20:18
在浏览网页时,我们会经常看到验证码,尤其是登录和注册的时候,今天就为大家介绍一下如何使用JSP生成验证码图片,原理其实是很简单的,直接上代码:
<%@ page contentType="image/jpeg;charset=utf-8" pageEncoding="GBK" %><%@ page import="java.util.*,java.awt.*,java.awt.image.*,javax.imageio.*" import="java.io.OutputStream" %><%! Color getRandColor(int fc,int bc) { Random rd = new Random(); if (fc > 255) fc = 255; if (bc > 255) bc = 255; int red = fc + rd.nextInt(bc - fc); int green = fc + rd.nextInt(bc - fc); int blue = fc + rd.nextInt(bc - fc); return new Color(red, green, blue); }%><html> <body><% Random r = new Random(); response.addHeader("Pragma", "No-cache"); response.addHeader("Cache-Control", "no-cache"); response.addDateHeader("expires", 0); int width = 80; int height = 32; BufferedImage pic = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics gc = pic.getGraphics(); gc.setColor(getRandColor(200, 250)); gc.fillRect(0, 0, width, height); String[] rNum = {"1", "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", "W", "X", "Y", "Z"}; int[] style = {Font.PLAIN, Font.BOLD, Font.ITALIC, Font.PLAIN + Font.BOLD, Font.BOLD + Font.ITALIC, Font.PLAIN + Font.ITALIC, Font.PLAIN + Font.BOLD + Font.ITALIC}; gc.setColor(getRandColor(60,150)); String rt = ""; for(int i = 0; i < 4; i++) { String temp = rNum[r.nextInt(rNum.length)]; rt = rt + temp; gc.setFont(new Font("Times New Roman", style[r.nextInt(7)], 21)); gc.drawString(temp, 15 + 13 * i + r.nextInt(2), 23); } gc.dispose(); OutputStream os = response.getOutputStream(); ImageIO.write(pic, "JPEG", os); os.flush(); os.close(); os = null; response.flushBuffer(); out.clear(); out = pageContext.pushBody();%> </body></html>
运行程序,通过浏览器访问,我们会看到浏览器上显示
大家可以自己尝试在绘图的时候增加一些删除线之类的,提高验证码识别难度。
0 0
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- jsp 生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp生成验证码
- jsp 生成验证码
- jsp生成验证码
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- JSP生成验证码
- jsp 生成验证码
- JSP生成验证码
- JSP生成验证码
- C++引入名字空间(namespace)意义何在?为什么using namespace std会成为常用语句?
- springmvc学习笔记(22)-springmvc开发小结
- ubuntu基本使用总结(不断更新中。。。
- iOS开发---MJRefresh下拉刷新/下拉加载
- LTE-TDD随机接入过程(2)-前导码Preamble的格式与时频位置
- JSP生成验证码
- 关于Block的copy和循环引用的问题
- Android 基于google Zxing实现对手机中的二维码进行扫描
- mongodb启动命令
- Linux笔记(41)——ACL权限
- git pull push没有指定branch报错的解决方法
- 使用StateListAnimator实现Button按下变小,抬起变大效果
- SVN 无法连接的解决方法:网络代理
- android 导出数据库步骤 需要root