3 常见验证码干扰方法 噪声点 JAVA实现


  1. 常见验证码的干扰方法。如果验证码不带干扰识别起来是非常简单的。做一个字库然后截取图片中的图像和字库对比,然后取相似度最高的就行了。但是这样识别太容易,所以最常见的方法就是加入噪声点。这样识别起来就不是那么容易了。
  2. Java代码

package img;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;

/*
 * 日期:2016年10月18日:下午6:01:53
 * 程序作用:带有干扰线
**/
public class CheckCode1 {

    public static BufferedImage getCode() {
        // 生成图片
        int ImgWidth = 120;
        int ImgHeight = 30;
        BufferedImage img = new BufferedImage(ImgWidth, ImgHeight, BufferedImage.TYPE_INT_BGR);
        // 得到画笔
        Graphics g = img.getGraphics();
        // 灰色
        g.setColor(Color.GRAY);
        // 填充画布
        g.fillRect(0, 0, ImgWidth, ImgHeight);
        // 蓝色
        g.setColor(Color.BLUE);
        // 边框
        g.drawRect(0, 0, ImgWidth - 1, ImgHeight - 1);
        // 数据 4个字符
        String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
        // 字的颜色
        g.setColor(Color.YELLOW);
        // 字体
        g.setFont(new Font("隶书", Font.BOLD, 20));
        // 随机获取下标
        Random random = new Random();
        int x = 20;
        int y = 20;
        for (int i = 0; i < 4; i++) {
            // 生成随机数
            int index = random.nextInt(words.length());
            char ch = words.charAt(index);
            // 画字符串
            g.drawString("" + ch, x, y);
            x += 20;
        }
        // 画干扰线
        int x1, y1, x2, y2;
        g.setColor(Color.RED);
        int lineNum=4;
        for (int i = 0; i < lineNum; i++) {
            x1=random.nextInt(ImgWidth/2);
            y1=random.nextInt(ImgHeight/2);
            x2=random.nextInt(ImgWidth);
            y2=random.nextInt(ImgHeight);
            g.drawLine(x1, y1, x2, y2);
        }
        return img;
    }

    public static void main(String[] args) throws IOException {
        BufferedImage img = getCode();
        ImageIO.write(img, "jpg", new File("src/img/aa.jpg"));
    }

}

下一期将介绍如何识别上图的验证码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值