* // 创建验证码图片并返回图片上的字符串,* final int y = (height),* final int height = 40,* final int x = (width) 有97%新玩家认为java识别复杂验证码()值得一读!

{image}

4条解答

一.Java如何实现验证码验证功能

Java如何实现验证码验证功能呢?日常生活中,验证码随处可见 ,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?

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

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

  • import ;

  • import 纯丛橘;

  • import ;

  • import mage;

  • import on;

  • import eam;

  • import ;

    • import ;
    • public final class GraphicHelper {
    • /**
    • 以字符串形式返回生成的验证码 ,同时输出一个图片
    • @param width
    • 图片的宽度
    • @param height
    • 图片的高度
    • @param imgType
    • 图片的类型
    • @param output
    • 做团 图片的输出流(图片将输出到这个流中)
    • @return 返回所生成的验证码(字符串)
  • */

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

  • StringBuffer sb = new StringBuffer();

  • Random random = new Random();

    • BufferedImage image = new BufferedImage(width, height, _INT_RGB);
  • Graphics graphic = cs();

    • (("F8F8F8"));
  • (0, 0, width, height);

    • Color[] colors = new Color[] { , , , , , ,
  • };

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

  • for (int i = 0; i < 50; i++) {

  • (colors[()]);

  • final int x = (width);

  • final int y = (height);

  • final int w = (20);

  • final int h = (20);

  • final int signA = an() ? 1 : -1;

  • final int signB = an() ? 1 : -1;

  • (x, y, x + w * signA, y + h * signB);

  • }

    • // 在 "画板"上绘制字母
  • (new Font("Comic Sans MS", , 30));

  • for (int i = 0; i < 6; i++) {

  • final int temp = (26) + 97;

  • String s = ((char) temp);

  • (s);

  • (colors[()]);

  • g(s, i * (width / 6), height - (height / 3));

  • }

  • ();

  • try {

  • (image, imgType, output);

  • } catch (IOException e) {

  • kTrace();

  • }

  • return ();

  • }

    • }

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

  • import eam;

    • import ception;
  • import t;

  • import et;

  • import etRequest;

  • import etResponse;

  • import on;

    • @WebServlet(urlPatterns = "/verify/" )
  • public class VerifyCodeServlet extends HttpServlet {

    • private static final long serialVersionUID = L;
    • @Override
  • protected void service(HttpServletRequest request, HttpServletResponse response)

  • throws ServletException, IOException {

    • // 获得 当前请求 对应的 会话对象
  • HttpSession session = n();

    • // 从请求中获得 URI ( 统一资源标识符 )
  • String uri = tURI();

  • ("hello : " + uri);

    • final int width = 180; // 图片宽度
  • final int height = 40; // 图片高度

  • final String imgType = "jpeg"; // 指定图片格式 (不是指MIME类型)

  • final OutputStream output = Stream(); // 获得可以向客户端返回图片的输出流

  • // (字节流)

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

  • String code = (width, height, imgType, output);

  • ("验证码内容: " + code);

    • // 建立 uri 和 相应的 验证码 的关联 ( 存储到当前会话对象的属性中 )
  • ute(uri, code);

    • (ute(uri));
    • }
    • }

接着写一个HTML注册页面用来检验一下:

  • 注册

  • 效果如下图:

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

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

    src="/demo/verify/">中,添加一个问号和一串后缀数字 ,当刷新时让后缀数字不断改变,那么形成的验证码也会不断变化,我们可以采用的一种办法是后缀数字用date代替 ,date获取本机时间,时间是随时变的,这样就保证了刷新验证码可以随时变化 。

    代码如下:

    • function myRefersh( e ) {

      • const source = ; // 获得原来的 src 中的内容
    • //( "source : " + source ) ;

      • var index = ( "?" ) ; // 从 source 中寻找 ? 第一次出现的位置 (如果不存在则返回 -1 )
    • //( "index : " + index ) ;

      • if( index > -1 ) { // 如果找到了 ? 就进入内部
    • var s = ( 0 , index ) ; // 从 source 中截取 index 之前的内容 ( index 以及 index 之后的内容都被舍弃 )

    • //( "s : " + s ) ;

      • var date = new Date(); // 创建一个 Date 对象的 一个 实例
    • var time = () ; // 从 新创建的 Date 对象的实例中获得该时间对应毫秒值

    • = s + "?time=" + time ; // 将 加了 尾巴 的 地址 重新放入到 src 上

      • //( ) ;
    • } else {

    • var date = new Date();

    • = source + "?time=" + ();

    • }

      • }

    如回答不详细可追问

    二.验证码识别 java

    有知道用java识别网站上验证码的。能说下思路可以。有代码更好 。不是产生验证码图片 ,是要程序识别出该验证码图片包含的文字。用随机数函数产生随机数

    三.或你密码和用户名有误

    两种可能1是程序判断有问题2是这个用户名或者密码就是不对

    四.java验证码识别

    如何识别是你自己要识别别人的,还抄是自己识别自己的啊?

    自己识别自己的,很简单的 ,每一张图片 ,都有一个对应的字符串数组保存在本地,例如
    Picture pic[N};
    String strs[N];

    系统随机是用地i张图片的时候,字符串就是strs[i]。不需要图片处理的!

    本文版权归趣快排SEO www.SeogurUblog.com 所有,如有转发请注明来出,竞价开户托管,seo优化请联系QQ▶61910465