`

java简单图片、验证码识别源码

阅读更多
java简单图片、验证码识别源码
package com.miaocn;
import java.awt.Graphics;  
import java.awt.Image;  
import java.awt.image.BufferedImage;  
import java.io.ByteArrayInputStream;  
import java.io.File;  
import java.io.IOException;
import java.io.InputStream;  
import java.net.MalformedURLException;
import java.net.URL;
 
import javax.imageio.ImageIO;  
import javax.media.jai.JAI;  
import javax.media.jai.RenderedOp;  
 
/** 
* 数字验证码识别器(用于识别xxx系统的图片验证码) 
*  
* 算法如下: 分析验证码图片结构,将其分隔成4个独立的数字图片,把四个独立的数字图片处理成单色位图。  
* 把单色位图转换为0、1数组,然后分别和0-9的字模进行匹配,得到图片上的数字信息。 
*  
* @version 1.0 2009-7-7 
* @author huangyuanmu 
* @since JDK 1.5.0_8 
*/ 
public class NumberVerCodeIdentifier {  
      
    static 
    {  
          System.setProperty("com.sun.media.jai.disableMediaLib", "true");  
    }  
 
//字典
    private static String a0 = "000111100";
    private static String a1 = "001111110";
   
    private static String a2 = "011111110";
    private static String a22 = "011011000";
   
    private static String a3 = "001111100";
    private static String a4 = "000000110";
   
    private static String a5 = "111111111";//前
    private static String a52 = "011111111";//前
    private static String a53 = "001011000";//后
   
    private static String a6 = "000111100000111100";
    private static String a7 = "001100000";
    private static String a8 = "001111100000111100";
    private static String a9 = "001111000";

    public String recognize(BufferedImage image){
  
     String result = "";
    
    
        BufferedImage newim[] = new BufferedImage[4];  
        if(null == image){  
            throw new RuntimeException("iamage为null");  
        }  
        // 将图像分成四块,因为要处理的文件有四个数字。  
        newim[0] = generateSingleColorBitMap(image.getSubimage(7, 5, 8, 11));  
        newim[1] = generateSingleColorBitMap(image.getSubimage(20, 5, 8, 11));  
        newim[2] = generateSingleColorBitMap(image.getSubimage(33, 5, 8, 11));  
        newim[3] = generateSingleColorBitMap(image.getSubimage(46, 5, 8, 11));  
       
       
        for (int k = 0; k < 4; k++) {
            int iw = newim[k].getWidth(null);  
            int ih = newim[k].getHeight(null);  
     
            StringBuffer numstr = new StringBuffer();
            // 因为是二值图像,这里的方法将像素读取出来的同时,转换为0,1的图像数组。  
            for (int i = 0; i < ih; i++) {  
                for (int j = 0; j < iw; j++) { 
                
                 int t = newim[k].getRGB(j, i);
                    if (t == -1)  
                     numstr.append("0");  
                    else 
                     numstr.append("1");;
                
                }  
            }  
            // 得到像匹配的数字串。  
           
           
            String straaa = numstr.toString().substring(0, 9) + numstr.toString().substring(79);
           // System.out.println(numstr.toString());
           
            boolean bye = true;
            if(straaa.equals(a6))
            {
             result = result+6;
             //System.out.println(6);
             bye = false;
            }
            if(straaa.equals(a8))
            {
             result = result+8;
             //System.out.println(8);
             bye = false;
            }
                       
         if(numstr.toString().substring(0,9).equals(a5) || numstr.toString().substring(0,9).equals(a52) || numstr.toString().substring(79).equals(a53)){
          result = result+5;
          //System.out.println(5);
       bye = false;
      }
           
         String aaaaa = numstr.toString().substring(79);
        
            if(bye){
             if(aaaaa.equals(a0)){
              result = result+0;
              //System.out.println(0);
             }
            
             if(aaaaa.equals(a1)){
              result = result+1;//System.out.println(1);
             }
             if(aaaaa.equals(a2) || aaaaa.equals(a22)){
              result = result+2;//System.out.println(2);
             }
             if(aaaaa.equals(a3)){
              result = result+3;//System.out.println(3);
             }
            
             if(aaaaa.equals(a4)){
              result = result+4;// System.out.println(4);
             }           
            
             if(aaaaa.equals(a7)){
              result = result+7;//System.out.println(7);
             }
            
             if(aaaaa.equals(a9)){
              result = result+9;//System.out.println(9);
             }           
            }
         
         
        }  
       // System.out.println(result);
        return result;
       
    }  
 
    /** 
     * 单色位图转换
     * @return 
     */ 
    private static BufferedImage generateSingleColorBitMap(Image colorImage) {  
        BufferedImage image = new BufferedImage(8, 11,  
                BufferedImage.TYPE_BYTE_GRAY);  
        Graphics g = image.getGraphics();  
        g.drawImage(colorImage, 0, 0, null);  
        g.dispose();  
        RenderedOp ro = JAI.create("binarize", image, new Double(100));  
        BufferedImage bi = ro.getAsBufferedImage();  
        return bi;  
    }  
 
    /** 
     * 测试 
     * @author  sunyang
     */ 
    public static void main(String args[]){  
    
     NumberVerCodeIdentifier nvi = new NumberVerCodeIdentifier();
    
     String res="";
  try {
   res = nvi.recognize(ImageIO.read(new File("d:\\111.bmp")));
  
   //res = nvi.recognize(ImageIO.read(new URL("http://******.com/validationCode.jsp")));
  } catch (MalformedURLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
        System.out.println(res);  
    }  
}

分享到:
评论

相关推荐

    基于Java的简单图形验证码识别源码.zip

    基于Java的简单图形验证码识别源码.zip基于Java的简单图形验证码识别源码.zip基于Java的简单图形验证码识别源码.zip基于Java的简单图形验证码识别源码.zip基于Java的简单图形验证码识别源码.zip基于Java的简单图形...

    Java简单验证码识别(附源码)

    总的来说,Java验证码识别不仅加深了对图像处理和模式识别的理解,也为后续学习更高级的机器学习和深度学习技术打下了基础。通过实践这个项目,你可以掌握实际问题的解决思路,提高编程能力,并且能够灵活运用所学...

    图片验证码识别JAVA源码

    在这个“图片验证码识别JAVA源码”中,我们探讨的是如何使用Java编程语言来实现对图片验证码的自动识别。这种技术通常涉及图像处理、模式识别以及机器学习算法。 首先,我们要理解验证码识别的基本流程: 1. **...

    java验证码识别源码

    在本Java验证码识别源码中,我们将会探讨如何利用编程技术来识别和解析这些图形验证码。 首先,验证码识别通常涉及图像处理和机器学习两大部分。图像处理用于预处理图片,提取特征;机器学习则用于训练模型,识别...

    java图片验证码源码

    这个简单的Java验证码源码示例涵盖了基础的图像处理和字符串随机生成。然而,实际应用中可能需要考虑更多高级特性,如字体变形、颜色渐变、噪点滤波等,以提高验证码的安全性和用户体验。在开发过程中,可以利用开源...

    Java,验证码,源码

    这个资源包含Java验证码的开发源码和相关的学习视频,可以帮助开发者深入理解验证码的实现原理和如何在自己的项目中应用。 验证码(CAPTCHA,Completely Automated Public Turing test to tell Computers and ...

    Java 简易图形验证码实例源码

    这个"Java简易图形验证码实例源码"提供了一个实现多种类型的验证码,包括gif动画、中文字符以及算术问题的形式,这使得验证码更具挑战性,更难被自动识别程序破解。以下是对这个实例源码中的关键知识点的详细解释: ...

    一个纯java的验证码识别算法

    本文将探讨一个基于Java实现的验证码识别算法,通过提供的标签“源码”和“工具”,我们可以推测这是一个开源项目,旨在帮助开发者理解验证码识别的原理并应用于实际项目。 验证码识别通常涉及图像处理、模式识别和...

    Java验证码实现源码

    要实现一个简单的Java验证码,我们需要以下步骤: 1. **生成随机字符串**:首先,我们需要生成一个随机的字符串,这可以通过Java的`Random`类和`StringBuilder`类配合实现。可以设置字符串的长度和包含的字符集(如...

    java 验证码识别 OCR

    java 验证码识别 OCR。

    csdn验证码识别源码

    csdn验证码识别源码,有很详细的注释,对每个函数实现功能有详细介绍,并且界面添加了验证码识别过程展现,很容易看懂! vs2010平台编写! csdn验证码识别,由于csdn的验证码很简单,所以只需对验证码码有效部分进行...

    Pkav-HTTP-Fuzzer图形验证码识别教程源码包.zip

    "源码包" 提示我们会有实际的代码,可以用来研究和学习验证码识别的技术细节。 【压缩包内容】 虽然未提供具体的文件列表,但根据标题和描述,我们可以假设压缩包内可能包含以下内容: 1. **源码文件**:可能是用...

    java验证码识别_源码

    java验证码识别,BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或...

    基于MATLAB数字验证码识别系统源码.zip

    基于MATLAB数字验证码识别系统源码.zip基于MATLAB数字验证码识别系统源码.zip基于MATLAB数字验证码识别系统源码.zip基于MATLAB数字验证码识别系统源码.zip基于MATLAB数字验证码识别系统源码.zip基于MATLAB数字验证码...

    java很好用的图片验证码

    本文将深入探讨Java中实现图片验证码的相关知识点,以及如何利用提供的"VerifyImage"文件来创建一个高效且实用的工具类。 1. **图片验证码的基本原理**: 图片验证码通常包含一串随机生成的字符或数字,这些字符被...

    Java滑动验证码源码

    本篇将围绕"Java滑动验证码源码"这一主题,深入探讨相关知识点。 首先,滑动验证码的核心原理在于生成一个含有可移动部分的图片,用户需要通过拖动滑块来完成验证。这种验证方式既考验了用户的交互能力,又增加了...

    java 上传和验证码 源码

    总结来说,这个"java 上传和验证码 源码"提供了一个简单的文件上传解决方案,利用了jspsmartupload.jar库,以及一个基本的验证码实现,以确保安全的用户交互。这样的源码可以作为学习和快速构建原型的参考,开发者...

    验证码识别接口生成器-源码

    验证码识别接口生成器是一种用于自动化处理验证码的工具,它基于JAVA编程语言,旨在简化验证码的识别过程。在本文中,我们将深入探讨这个源码实现的关键技术、步骤以及学习要点。 首先,验证码识别的核心在于图像...

    消除验证码上的干扰(java源码)

    消除验证码上的干扰,抛砖引玉,大家见笑。

    javaweb_验证码登陆源码

    JavaWeb验证码登录源码解析与应用 在JavaWeb开发中,验证码是一种常用的安全机制,用于防止恶意自动化的机器人或爬虫程序尝试登录用户账户。在本项目中,开发者使用了Servlet技术来实现这一功能,旨在增强网站登录...

Global site tag (gtag.js) - Google Analytics