Java生成登录注册验证码+添加干扰选项,文章中含有源码

package cn.demo1;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

//
public class ImageCode {
    //数组
    static String[] strings = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "m", "n",
            "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "2", "3", "4", "5",
            "6", "7", "8", "9"};

    public static void main(String[] args) throws IOException {
        //大的代码,通过Java生成一个图片(**图片上含有数字或者字母或者干扰线**)
        //??  1->5->
        //和自己画画一样的
        /**
         *     1、准备画板
         *     2、准备笔
         *     3、准备一些数据,随机在数组中取出四个数据(for循环)
         *     4、将去除的数据画到画板上去
         *     5、生成一个真正的是图片
         */

        //定义一个图片的宽度
        int w=210;
        //定义高度
        int h=170;
        //图片的类型
        int imageType=BufferedImage.TYPE_INT_RGB;
        //   1、JDK中提供画板类
        BufferedImage image=new BufferedImage(w,h,imageType);
        //修改图片颜色   idea     图片默认黑色

        //先获取画笔对象
        Graphics g= image.getGraphics();
        //设置画笔颜色
        g.setColor(Color.pink);
        //画一个填充矩形
        g.fillRect(0,0,210,170);


        //设置画笔颜色,不然和填充举证颜色一样,看不出来
        g.setColor(Color.gray);
        //设置字体
        g.setFont(new Font("楷体",Font.TYPE1_FONT,45));
        //使用Random随机产生一个数字
        Random random=new Random();
        int x=25,y=25;
        //3、准备一些数据,随机在数组中取出四个数据(for循环)
        for (int i = 0; i < 4; i++) {
            //num 值是随机生成的
            int num= random.nextInt(strings.length);
            //每次循环取一个
            String str= strings[num];
            //每次获取一个数字画到图片上去
            g.drawString(str,x,y);
            x+= random.nextInt(65);
            y+=random.nextInt(55);
        }
        g.setColor(Color.red);
        for (int j = 0; j < 60; j++) {
            //画干扰线
            g.drawLine(random.nextInt(150)-100,random.nextInt(150)-70,
                    random.nextInt(150)+120, random.nextInt(150)+140);
        }

        //5.把image生成到本地的磁盘上
        ImageIO.write(image,"jpg",new File("../aaa.jpg"));

    }
}

在这里插入图片描述

在这里插入图片描述
代码来源于B站,侵权请联系删除

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
public synchronized String nextId() { long timestamp = timeGen(); //获取当前毫秒数 //如果服务器时间有问题(时钟后退) 报错。 if (timestamp < lastTimestamp) { throw new RuntimeException(String.format( "Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); } //如果上次生成时间和当前时间相同,在同一毫秒内 if (lastTimestamp == timestamp) { //sequence自增,因为sequence只有12bit,所以和sequenceMask相与一下,去掉高位 sequence = (sequence + 1) & sequenceMask; //判断是否溢出,也就是每毫秒内超过4095,当为4096时,与sequenceMask相与,sequence就等于0 if (sequence == 0) { timestamp = tilNextMillis(lastTimestamp); //自旋等待到下一毫秒 } } else { sequence = 0L; //如果和上次生成时间不同,重置sequence,就是下一毫秒开始,sequence计数重新从0开始累 } lastTimestamp = timestamp; long suffix = (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; String datePrefix = DateFormatUtils.format(timestamp, "yyyyMMddHHMMssSSS"); return datePrefix + suffix; } protected long tilNextMillis(long lastTimestamp) { long timestamp = timeGen(); while (timestamp <= lastTimestamp) { timestamp = timeGen(); } return timestamp; } protected long timeGen() { return System.currentTimeMillis(); } private byte getLastIP(){ byte lastip = 0; try{ InetAddress ip = InetAddress.getLocalHost(); byte[] ipByte = ip.getAddress(); lastip = ipByte[ipByte.length - 1]; } catch (UnknownHostException e) { e.printStackTrace(); } return lastip; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不良使

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值