全网整合营销服务商

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

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

Java验证码图片生成代码

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小时内与您取得联系。