Java生成验证码图片的具体代码,供大家参考,具体内容如下

1、首先新建一各专门生成验证码图片的类VerifyCode:
public class VerifyCode {
private int w=70;
private int h=35;
private Random r=new Random();
//宋体,华文楷书,黑体,华文新魏,华文隶书,微软雅黑,楷体_GB2312,Times New Roman
private String [] fontNames={"宋体","华文楷书","黑体","华文新魏","微软雅黑","华文隶书","楷体_GB2312","Times New Roman"};
//可选的字符
private String codes="23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
//背景色
private Color bgColor=new Color(255,255,255);
//验证码上的文本
private String text;
//生成随机颜色
private Color randomColor(){
int red=r.nextInt(150);
int green=r.nextInt(150);
int blue=r.nextInt(150);
return new Color(red,green,blue);
}
//生成随机字体
private Font randomFont(){
int index=r.nextInt(fontNames.length);//获取下标
String fontName=fontNames[index];//生成随机的字体名称
int style=r.nextInt(4);//获取随机样式,0表示无样式,1表示粗体,2表示斜体,3表示粗体加斜体
int size=r.nextInt(5)+24;//生成随机字号,24~28
return new Font(fontName,style,size);
}
//画干扰线
private void drawLine(BufferedImage image){
int num=3;//一共画3条
Graphics2D g2=(Graphics2D) image.getGraphics();
for(int i=0;i<num;i++){//随机生成坐标,即4个值
int x1=r.nextInt(w);
int y1=r.nextInt(h);
int x2=r.nextInt(w);
int y2=r.nextInt(h);
g2.setStroke(new BasicStroke(1.5F));//设置笔画的宽度
g2.setColor(Color.blue);//干扰线颜色
g2.drawLine(x1, y1, x2, y2);//画线
}
}
//随机生成一个字符
private char randomChar(){
int index=r.nextInt(codes.length());
return codes.charAt(index);
}
//创建BufferedImage
private BufferedImage createImage(){
BufferedImage image=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
Graphics2D g2=(Graphics2D) image.getGraphics();
g2.setColor(this.bgColor);
g2.fillRect(0, 0, w, h);
return image;
}
//外界调用这个方法得到验证码
public BufferedImage getImage(){
BufferedImage image=createImage();//创建图片缓冲区
Graphics2D g2=(Graphics2D)image.getGraphics();//得到绘制环境
StringBuilder sb=new StringBuilder();//用来装载生成的验证码文本
//向图中画4个字符
for(int i=0;i<4;i++){//循环4次
String s=randomChar()+"";//随机生成一个字符
sb.append(s);//把字母添加到sb中
double x=i*1.0*w/4;//设置当前字符的x轴坐标
g2.setFont(randomFont());//设置随机字体
g2.setColor(randomColor());//设置随机颜色
g2.drawString(s, (int)x, h-5);
}
this.text=sb.toString();//把生成的字符串赋给了this.text
drawLine(image);//添加干扰线
return image;
}
//返回验证码图片上面的文本
public String getText(){
return text;
}
//保存图片到指定的输出流
public static void output(BufferedImage image,OutputStream out) throws IOException{
ImageIO.write(image, "JPEG", out);
}
}
2、在jsp页面上应用:
其核心代码如下:
<form action="/test/LoginServlet" method="post"> 用户名:<input type="text" name="username" value="<%=uname %>"><br> 密 码:<input type="password" name="password"><br> 验证码:<input type="text" name="verifyCode"> <img id="img" src="/test/VerifyCodeServlet"> <a href="JavaScript:_change()" rel="external nofollow" >看不清换一张</a><br> <input type="submit" value="登录"> </form>
看不清换一张使用javascript实现,代码如下:
<script type="text/javascript">
function _change(){
/**
*1.得到image图片
*2.修改其src为/test/VerifyCodeServlet
*/
var imgEle=document.getElementById("img");
imgEle.src="/test/VerifyCodeServlet?a="+new Date().getTime();
}
</script>
+new Date().getTime()这条语句可以欺骗浏览器,以为请求是新的,实现验证码的改变。
3、在第2步中,VerifyCodeServlet的实现生成一张验证码,并且通过session域保存验证码图片对应的文本内容,为后面的登录验证验证码是否正确做准备。核心代码如下:
public class VerifyCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 1.生成图片
* 2.保存图片上的文本到session域中
* 3.把图片响应给客户端
*/
VerifyCode vc=new VerifyCode();
BufferedImage image=vc.getImage();
//保存图片上的文本到session域
request.getSession().setAttribute("session_code", vc.getText());
VerifyCode.output(image, response.getOutputStream());
}
}
4、最后一步,实现登录验证验证码是否正确,其核心代码如下:
public class LoginServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 校验验证码
* 1.从session中获取正取的验证码
* 2.从表单中获取用户填写的验证码
* 3.进行比较
* 4.如果相同,向下运行,否则保存错误信息到request域,转发到login.jsp
*/
String sessionCode=(String)
request.getSession().getAttribute("session_code");//获得的验证码里面对应的文本内容
String paramCode=request.getParameter("verifyCode");//用户输入文本框里面的内容
if(!paramCode.equalsIgnoreCase(sessionCode)){
request.setAttribute("msg", "验证码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);//打回到登录界面。
return;//返回,不继续执行下面的语句。
}
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java验证码图片
# Java验证码
# Java验证图片
# Java如何随机生成图片验证码
# java实现随机生成验证码图片
# java生成随机图片验证码
# java生成图片验证码的示例代码
# Java 生成图片验证码3种方法(字母、加减乘除、中文)
# Java web实现动态图片验证码的示例代码
# java生成图片验证码功能
# java Servlet 实现动态验证码图片示例
# Java 生成随机验证码图片的示例
# 验证码
# 微软
# 宋体
# 是否正确
# 粗体
# 这条
# 给了
# 可选
# 表单
# 错误信息
# 图中
# 具体内容
# 大家多多
# 文本框
# 背景色
# 客户端
# 画线
# 验证码错误
# BufferedImage
# image
相关文章:
贸易公司网站制作流程,出口贸易网站设计怎么做?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
如何通过cPanel快速搭建网站?
网站制作的步骤包括,正确网址格式怎么写?
Android自定义控件实现温度旋转按钮效果
建站之星CMS五站合一模板配置与SEO优化指南
如何挑选高效建站主机与优质域名?
建站之星如何优化SEO以实现高效排名?
小型网站制作HTML,*游戏网站怎么搭建?
如何通过建站之星自助学习解决操作问题?
装修招标网站设计制作流程,装修招标流程?
html制作网站的步骤有哪些,iapp如何添加网页?
*服务器网站为何频现安全漏洞?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
建站之星如何实现五合一智能建站与营销推广?
如何快速搭建FTP站点实现文件共享?
建站主机选购指南:核心配置与性价比推荐解析
如何快速生成橙子建站落地页链接?
如何在香港服务器上快速搭建免备案网站?
宝塔建站后网页无法访问如何解决?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何快速上传建站程序避免常见错误?
专业网站建设制作报价,网页设计制作要考什么证?
公司门户网站制作流程,华为官网怎么做?
如何制作算命网站,怎么注册算命网站?
如何配置IIS站点权限与局域网访问?
如何在Windows 2008云服务器安全搭建网站?
湖北网站制作公司有哪些,湖北清能集团官网?
平台云上自助建站如何快速打造专业网站?
魔方云NAT建站如何实现端口转发?
网站制作公司,橙子建站是合法的吗?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
高端建站如何打造兼具美学与转化的品牌官网?
如何选择靠谱的建站公司加盟品牌?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何获取上海专业网站定制建站电话?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
外贸公司网站制作,外贸网站建设一般有哪些步骤?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
建站之星与建站宝盒如何选择最佳方案?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
如何在建站主机中优化服务器配置?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
*请认真填写需求信息,我们会在24小时内与您取得联系。