当前位置首页 > 软件编程 > JAVA教程 > java写一个验证码,JAVA验证码生成

java写一个验证码,JAVA验证码生成

  java写一个验证码,JAVA验证码生成

  写爬虫互联网协议(互联网协议)被封了怎么解决?立即使用

  在我们的日常生活中验证码随处可见,它可以在一定程度上保护我们的账号安全,那么如何实现它呢?

  (学习视频推荐:java课程)

  爪哇实现验证码验证功能其实非常简单:用到了一个制图法类在画板上绘制字母,随机选取一定数量的字母随机生成,然后在画板上随机生成几条干扰线。

  首先,写一个验证码生成帮助类,用来绘制随机字母:

  导入Java。awt。颜色;

  导入Java。awt。字体;

  导入Java。awt。图形;

  导入Java。awt。形象。缓冲图像;

  导入Java。io。io异常;

  导入Java。io。输出流;

  导入Java。util。随机;

  导入javax。imageio。imageio

  公共最终类图形编辑器{

  /**

  * 以字符串形式返回生成的验证码,同时输出一个图片

  *

  * @param宽度

  * 图片的宽度

  * @param高度

  * 图片的高度

  * @param imgType

  * 图片的类型

  * @param输出

  * 图片的输出流(图片将输出到这个流中)

  * @返回返回所生成的验证码(字符串)

  */

  public static String create(final int width,final int height,final String imgType,OutputStream output) {

  字符串缓冲区sb=新字符串缓冲区();

  Random Random=new Random();

  BufferedImage=新的buffered image(宽度,高度,BufferedImage .TYPE _ INT _ RGB);

  图形图形=图像。获取图形();

  图形。设置颜色(颜色。getcolor( F8F8 );

  graphic.fillRect(0,0,width,height);

  Color[] colors=新颜色[] { Color .蓝色,彩色。灰色,彩色。绿色,彩色。红色,彩色。黑色,彩色。橙色,

  颜色。青色};

  //在画板上生成干扰线条( 50 是线条个数)

  for(int I=0;i 50i ) {

  图形。设置颜色(颜色[随机。nextint(颜色。长度)]);

  final int x=random。nextint(宽度);

  final int y=random。nextint(高度);

  最终int w=random。nextint(20);

  最终int h=random。nextint(20);

  最终int signA=random。下一个布尔()?1 : -1;

  最终整数B=随机。下一个布尔()?1 : -1;

  graphic.drawLine(x,y,x w * signA,y h * signB);

  }

  //在画板上绘制字母

  graphic.setFont(新字体(‘漫画无MS’,字体。粗体,30));

  for(int I=0;i6;i ) {

  最终整数温度=随机。nextint(26)97;

  字符串s=字符串。((char)temp)的值;

  某人追加;

  图形。设置颜色(颜色[随机。nextint(颜色。长度)]);

  graphic.drawString(s,i *(宽度/6),高度-(高度/3));

  }

  图形。dispose();

  尝试{

  ImageIO.write(image,imgType,output);

  } catch (IOException e) {

  e。printstacktrace();

  }

  归还某人。tostring();

  }

  }接着,创建一个servlet,用来固定图片大小,以及处理验证码的使用场景,以及捕获页面生成的验证码(捕获到的二维码与用户输入的验证码一致才能通过)。

  导入Java。io。io异常;

  导入Java。io。输出流;

  导入javax。servlet。servlet异常;

  导入javax。servlet。注释。web servlet

  导入javax。servlet。http。http servlet

  导入javax。servlet。http。http servlet请求;

  导入javax。servlet。http。http servlet响应;

  导入javax。servlet。http。http会话;

  @ web servlet(URL patterns=/verify/regist。do’)

  公共类VerifyCodeServlet扩展HttpServlet {

  private static final long serial版本uid=3398560501558431737 l;

  @覆盖

  受保护的空的服务(HttpServletRequest请求,HttpServletResponse响应)

  引发ServletException,IOException {

  //获得当前请求对应的会话对象

  http会话session=请求。getsession();

  //从请求中获得URI(统一资源标识符)

  字符串uri=请求。get request uri();

  系统。出去。println( hello: uri );

  最终int width=180//图片宽度

  最终int height=40//图片高度

  最终字符串imgType= jpeg//指定图片格式(不是指哑剧类型)

  最终输出流输出=响应。获取输出流();//获得可以向客户端返回图片的输出流

  //(字节流)

  //创建验证码图片并返回图片上的字符串

  字符串代码=图形助手。创建(宽度,高度,imgType,输出);

  System.out.println(验证码内容: 代码);

  //建立上呼吸道感染和相应的验证码的关联(存储到当前会话对象的属性中)

  session.setAttribute(uri,代码);

  系统。出去。println(会话。get属性(uri));

  }

  }(相关教程推荐:java入门)

  接着写一个超文本标记语言注册页面用来检验一下:

  !声明文档类型

  超文本标记语言

  头

  meta charset=UTF-8

  标题注册/标题

  link rel=样式表 href= styles/general。 CSS

  link rel=样式表 href=样式/单元格。 CSS

  链接rel=样式表 href=样式/表单。 CSS

  脚本类型= text/JavaScript src= js/ref。js /脚本

  style type=text/css 。徽标-容器{

  边距-顶部:50px

  }。徽标-集装箱img {

  宽度:100像素

  }。消息容器{

  高度:80px

  }。链接容器{

  高度:40px

  行高:40px

  }。链接-容器一个{

  文字-装饰:无;

  }

  /风格

  /头

  身体

  div class=容器形式-容器

  窗体action=/闻道/regist.do 方法=post

  div class=form !-注册表单开始-

  div class=form-row

   span class=单元格-1

  i class=fa fa-user/i

  /span

  span class= cell-11 style= text-align:left;

  输入类型= text name= username placeholder=请输入用户名

  /span

  /div

  div class=form-row

   span class=单元格-1

  I=fa fa-key/I

  /span

  span class= cell-11 style= text-align:left;

  输入类型=密码名称=密码占位符=请输入密码

  /span

  /div

  div class=form-row

   span class=单元格-1

  I= fa fa-keyboard-o /I

  /span

  span class= cell-11 style= text-align:left;

  输入类型=密码名称=确认占位符=请确认密码

  /span

  /div

  div class=form-row

  span class=cell-7

  输入类型= text name=验证码 placeholder=请输入验证码

  /span

  span class= cell-5 style= text-align:center;

  img src=/demo/verify/regist。不要点击=我的参考(这个)

  /span

  /div

  div class= form-row style= border:none;

  span class= cell-6 style= text-align:left

  输入类型=重置值=重置

  /span

  span class= cell-6 style= text-align:right;

  输入类型=提交值=注册

  /span

  /div

  /div!-注册表单结束-

  /表单

  /div

  /body

  /html效果图:

  在控制台接收到的图片中验证码的变化如下:

  当点击刷新页面的时候,验证码也会随着变化,但我们看不清验证码时,只要点击验证码就会刷新,这样局部的刷新可以用Java脚本语言来实现。

  在img src=/demo/verify/register . do 中,添加一个问号和一串后缀数字。刷新时后缀数字会不断变化,形成的验证码也会不断变化。我们可以采用的一种方式是把后缀数字换成日期,这样会得到当地时间,时间会随时变化,这样就保证了刷新验证码可以随时变化。

  代码如下:

  函数myRefersh( e ) {

  const源=e.src//获取原始src中的内容

  //console . log( source: source );

  var index=source.indexOf(?)) ;//从源头找?第一次出现的位置(如果不存在,返回-1)

  //console . log( index: index );

  If( index -1) {//如果找到?进去吧。

  var s=source.substring( 0,index);//从源中截取索引之前的内容(索引和索引之后的内容被丢弃)

  //console . log( s: s );

  var Date=new Date();//创建日期对象的实例

  var time=date . gettime();//从新创建的Date对象实例中获取该时间对应的毫秒值

  e.src=s ?时间=时间;//将尾地址放回src上

  //console . log(e . src);

  }否则{

  var Date=new Date();

  e.src=source ?time= date . gettime();

  }

  }以上是用java实现一个验证码功能的细节。更多请关注我们的其他相关文章!

本文来自网络,不代表菜鸟教程之家立场,转载请注明出处。
返回顶部