java验证码开发示例

简介: java验证码开发示例


验证码是一种区分用户是计算机还是人的公共全自动程序;可以防止恶意破解密码、刷票、论坛灌水、刷页、恶意注册、登录。

直接上代码

public static void main(String[] args) throws IOException {

    Random rand = new Random();
    //画板
    BufferedImage i = new BufferedImage(200, 100, 1);
    //画笔
    var m = i.createGraphics();
    //平滑度
    m.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);
    m.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    m.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);
    m.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(150, 200)));
    m.fillRect(0, 0, 200, 100);
    Font font = new Font("宋体", Font.BOLD, 50);
    m.setFont(font);
    var fm = m.getFontMetrics(font);
    //验证字符
    String setter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    StringBuilder sb = new StringBuilder();
    //生成随机验证码
    for (int j = 0; j < 6; j++) {
        //随机颜色
        m.setColor(new Color(rand.nextInt(120, 255), rand.nextInt(120, 255), rand.nextInt(120, 255), 255));
        int x = j * 30 + 10;
        //验证字符位置
        int y1 = i.getHeight() / 2 + (fm.getAscent() - fm.getDescent()) / 2 - fm.getHeight() / 3;
        int y2 = i.getHeight() / 2 + (fm.getAscent() - fm.getDescent()) / 2 + fm.getHeight() / 3;
        int a = rand.nextInt(setter.length());
        font.deriveFont(rand.nextInt(45, 55));
        var s = setter.substring(a, a + 1);
        m.drawString(s, x, rand.nextInt(y1, y2));
        sb.append(s);
    }

    //验证码干扰
    for (int j = 0; j < 10; j++) {
        m.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(50, 120)));
        int a = rand.nextInt(setter.length());
        var s = setter.substring(a, a + 1);
        m.drawString(s, rand.nextInt(10, 190), rand.nextInt(10, 90));
    }

    for (int j = 0; j < 3; j++) {
        m.setColor(new Color(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255), rand.nextInt(100, 200)));
        m.setStroke(new BasicStroke(3));
        m.drawLine(rand.nextInt(10, 20), rand.nextInt(20, 90), rand.nextInt(170, 190), rand.nextInt(20, 90));

    }
    //曲线干扰
    Point[] points = {new Point(0, 0), new Point(0, rand.nextInt(100)), new Point(200, rand.nextInt(100))

    };

    GeneralPath path = new GeneralPath();
    path.moveTo(points[0].x, points[0].y);
    for (int i2 = 0; i2 < points.length - 1; ++i2) {
        Point sp = points[i2];
        Point ep = points[i2 + 1];
        Point c1 = new Point((sp.x + ep.x) / 2, sp.y);
        Point c2 = new Point((sp.x + ep.x) / 2, ep.y);
        path.curveTo(c1.x, c1.y, c2.x, c2.y, ep.x, ep.y);
    }

    // g.draw(path);
    for (int n = 0; n <= 355; n += 10) {
        // g.drawArc(100, 200, 600, 300, n, 5);
    }

    int yy = 100;// y
    int hh = 100;// 高度
    int aa = 200;//
    // x
    for (int x = 10; x < 200; x += 15) {
        int y = (int) (yy + hh * Math.sin(x * Math.PI / aa));
        //g.drawLine(x, (int) y, x, (int) y);
        m.fillOval(x, y, 6, 6);
    }

    m.dispose();
    ImageIO.write(i, "jpg", new File("yanzheng.jpg"));
    Runtime.getRuntime().exec("cmd /k start yanzheng.jpg");

}

目录
相关文章
|
6月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
465 6
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
7月前
|
IDE Java 关系型数据库
Java 初学者学习路线(含代码示例)
本教程为Java初学者设计,涵盖基础语法、面向对象、集合、异常处理、文件操作、多线程、JDBC、Servlet及MyBatis等内容,每阶段配核心代码示例,强调动手实践,助你循序渐进掌握Java编程。
885 3
|
7月前
|
Java
java入门代码示例
本文介绍Java入门基础,包含Hello World、变量类型、条件判断、循环及方法定义等核心语法示例,帮助初学者快速掌握Java编程基本结构与逻辑。
552 0
|
7月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
7月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
274 0
Java API 开发者
221 0
|
8月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
386 2