Java验证码图片生成源代码

Java验证码图片生成源代码

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

public class Captchautil {

    public static String random() {
        // 使用字符串来接收随机字符
        StringBuffer stringBuffer = new StringBuffer ();
        // 所有的小写字符
        String arrWord = "abcdefghigklmnopqrstuvwxyz";
        // 使用String.toUpperCase 转换成大写字符
        String allCase = arrWord.toUpperCase () + arrWord + "1234567890";
        // 挑选所有的随机字符串转化为字符数组
        byte[] bytes = allCase.getBytes ();
        // 创建随机抽取
        Random random = new Random ();
        // 获取4个随机字符并存方法到list集合中
        for (int i = 0; i < 4; i++) {
            int index = random.nextInt (bytes.length + 1);
            // 将对应的ASCII码值转换字符存储
            stringBuffer.append ((char)bytes[index]);

        }
        return stringBuffer.toString ();
    }

    public static void outputImage(String code, OutputStream ops) {
        // 创建Random用来画干扰线
        Random random = new Random ();
        // 创建图片对象
        BufferedImage image = new BufferedImage (100, 40, BufferedImage.TYPE_3BYTE_BGR);
        // 设置画布
        Graphics graphics = image.getGraphics ();
        // 设置白色背景
        graphics.setColor (Color.white);
        graphics.fillRect (0, 0, 100, 40);
        byte[] bytes = code.getBytes ();
        // 写字获取随机颜色
            graphics.setColor (new Color (random.nextInt (255) + 1,
                    random.nextInt (255) + 1,
                    random.nextInt (255) + 1));
            graphics.setFont (new Font ("微软雅黑", Font.PLAIN, 20));
            // 设置验证码位置
            graphics.drawBytes (bytes, 0, 4, 20, 20);
        // 随机线条
        for (int i = 0; i < 10; i++) {
            graphics.setColor (new Color (random.nextInt (255) + 1,
                    random.nextInt (255) + 1,
                    random.nextInt (255) + 1));
            graphics.drawLine (random.nextInt (100),
                    random.nextInt (40),
                    random.nextInt (100),
                    random.nextInt (40));
        }

        try {
            boolean write = ImageIO.write (image, "png", ops);
            System.out.println (write);
        } catch (IOException e) {
            e.printStackTrace ();
        }


    }

    public static void main(String[] args){
        String code = random ();
        System.out.println (code);
        try {
            // 填写图片的饿导出位置
            OutputStream sot = new FileOutputStream ("I:\\file\\a.png", false);
            outputImage (code, sot);
        } catch (FileNotFoundException e) {
            e.printStackTrace ();
        }


    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
抱歉,我并不能为你提供完整的 Java 源代码,但我可以给你一些代码片段和思路: 1. 注册界面的设计: ```java JFrame frame = new JFrame("注册"); frame.setSize(400, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(4, 2)); JLabel nameLabel = new JLabel("用户名:"); JTextField nameField = new JTextField(); JLabel passwordLabel = new JLabel("密码:"); JPasswordField passwordField = new JPasswordField(); JLabel phoneLabel = new JLabel("手机号:"); JTextField phoneField = new JTextField(); JButton getCodeButton = new JButton("获取验证码"); getCodeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO: 向后台发送验证码请求 } }); panel.add(nameLabel); panel.add(nameField); panel.add(passwordLabel); panel.add(passwordField); panel.add(phoneLabel); panel.add(phoneField); panel.add(getCodeButton); JButton registerButton = new JButton("注册"); registerButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO: 向后台发送注册请求 } }); panel.add(registerButton); frame.add(panel); frame.setVisible(true); ``` 2. 在后台生成随机验证码并发送到用户手机上: ```java String phone = phoneField.getText(); String code = generateRandomCode(); // 生成随机验证码 boolean success = sendCodeToPhone(phone, code); // 向手机发送验证码 if (success) { // TODO: 将验证码保存到数据库中 } ``` 3. 注册按钮点击后,后台验证验证码是否正确,如果正确则将用户密码进行 MD5 加密后存储到数据库中: ```java String name = nameField.getText(); String password = passwordField.getPassword(); String phone = phoneField.getText(); String code = codeField.getText(); // 用户输入的验证码 if (validateCode(phone, code)) { // 验证验证码是否正确 String encryptedPassword = encryptPassword(password); // 对密码进行 MD5 加密 boolean success = saveUserToDatabase(name, encryptedPassword, phone); // 将用户信息保存到数据库中 if (success) { // TODO: 注册成功的提示 } else { // TODO: 注册失败的提示 } } else { // TODO: 验证码错误的提示 } ``` 4. 登录界面的设计: ```java JFrame frame = new JFrame("登录"); frame.setSize(400, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(3, 2)); JLabel nameLabel = new JLabel("用户名:"); JTextField nameField = new JTextField(); JLabel passwordLabel = new JLabel("密码:"); JPasswordField passwordField = new JPasswordField(); JLabel phoneLabel = new JLabel("手机号:"); JTextField phoneField = new JTextField(); JButton getCodeButton = new JButton("获取验证码"); getCodeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO: 向后台发送验证码请求 } }); panel.add(nameLabel); panel.add(nameField); panel.add(passwordLabel); panel.add(passwordField); panel.add(phoneLabel); panel.add(phoneField); panel.add(getCodeButton); JButton loginButton = new JButton("登录"); loginButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO: 向后台发送登录请求 } }); panel.add(loginButton); frame.add(panel); frame.setVisible(true); ``` 5. 登录按钮点击后,后台验证验证码是否正确,如果正确则将用户输入的密码进行 MD5 加密后与数据库中存储的密码进行比对,如果一致则登录成功,否则登录失败: ```java String name = nameField.getText(); String password = passwordField.getPassword(); String phone = phoneField.getText(); String code = codeField.getText(); // 用户输入的验证码 if (validateCode(phone, code)) { // 验证验证码是否正确 String encryptedPassword = encryptPassword(password); // 对密码进行 MD5 加密 if (checkUserInDatabase(name, encryptedPassword)) { // 验证用户是否存在并且密码是否正确 // TODO: 登录成功的提示 } else { // TODO: 登录失败的提示 } } else { // TODO: 验证码错误的提示 } ``` 其中,`generateRandomCode()`、`sendCodeToPhone()`、`validateCode()`、`encryptPassword()`、`saveUserToDatabase()`、`checkUserInDatabase()` 都是需要根据具体实现进行编写的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值