验证码的生成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public static void ImageCodeMaker(){
            // 定义图片的宽度和高度
            int width = 90, height = 40;
            // 创建一个图像对象
            BufferedImage image = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            // 得到图像的环境对象
            Graphics g = image.createGraphics();
             
            g.setColor(getRandColor(180, 250)); 
            g.fillRect(0, 0, width, height); 
             
            Random random = new Random();
             
            for (int i = 0; i < 5; i++) {
                g.setColor(getRandColor(50, 100));
                int x = random.nextInt(width);
                int y = random.nextInt(height);
                g.drawOval(x, y, 4, 4);
            }
            // 设置字体,下面准备画随机数
            g.setFont(new Font("", Font.PLAIN, 40));
            // 随机数字符串
            String sRand = "";
            for (int i = 0; i < 4; i++) {
                // 生成四个数字字符
                String rand = getRandomChar();;
                        //String.valueOf(random.nextInt(10));
                sRand += rand;
                // 生成随机颜色
                g.setColor(new Color(20 + random.nextInt(80), 20 + random
                        .nextInt(100), 20 + random.nextInt(90)));
                // 将随机数字画在图像上
                g.drawString(rand, (17 + random.nextInt(3)) * i + 8, 34);
 
                    // 生成干扰线
                    for (int k = 0; k < 12; k++) {
                        int x = random.nextInt(width);
                        int y = random.nextInt(height);
                        int xl = random.nextInt(9);
                        int yl = random.nextInt(9);
                        g.drawLine(x, y, x + xl, y + yl);
                    }
            }
            System.out.println(sRand);
             
    }
 
    private static String getRandomChar() {
 
        String ret ="";
         
        //数字和字母的组合
         String baseNumLetter = "0123456789ABCDEFGHJKLMNOPQRSTUVWXYZ";
        //纯数字
        // String baseNum = "0123456789";
         //纯字母
        // String baseLetter = "ABCDEFGHJKLMNOPQRSTUVWXYZ";
          
        // ret = baseLetter.charAt(new Random().nextInt(baseLetter.length()))+"";
          
        // ret = baseNum.charAt(new Random().nextInt(baseNum.length()))+"";
          
         ret = baseNumLetter.charAt(new Random().nextInt(baseNumLetter.length()))+"";
          
          
          
         return ret;
    }
 
 
            /**
             * 产生一个随机的颜色
             *
             * @param fc
             *            颜色分量最小值
             * @param bc
             *            颜色分量最大值
             * @return
             */
            public static Color getRandColor(int fc, int bc) {
                Random random = new Random();
                if (fc > 255){
                    fc = 255;
                }
                if (bc > 255){
                    bc = 255;
                }
                int r = fc + random.nextInt(bc - fc);
                int g = fc + random.nextInt(bc - fc);
                int b = fc + random.nextInt(bc - fc);
                return new Color(r, g, b);
            }

  转载其他文章:

复制代码
在页面显示时 需要如下代码:
// 首先设置页面不缓存  
        response.setHeader("Pragma", "No-cache");  
        response.setHeader("Cache-Control", "no-cache");  
        response.setDateHeader("Expires", 0);  


 // 将生成的随机数字字符串写入Session  
        request.getSession(false).setAttribute("randcode", sRand);  
        // 使图像生效  
        g.dispose();  
        // 输出图像到页面  
        ImageIO.write(image, "JPEG", response.getOutputStream()); 
复制代码

 

posted @   凉城  阅读(340)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示