首页 > 源码分享 > PHP > 正方教务系统验证码识别
2016
12-01

正方教务系统验证码识别

文章转自http://www.unique-liu.com/181.html

验证码识别用的是网上的java版,经过本人的改良只剩下验证码识别。先看一下效果正方教务系统验证码自动识别

要如何配置呢,很简单,首先下载工程文件

提取密码:2qr8 解压密码:www.vnoon.cn
解压后将此工程导入myeclipse

ImagePreProcess.srcPath = ctrackcode_srcimg;
ImagePreProcess.trainPath = ctrackcode_trainimg;
String name = request.getParameter("c").toString();      //给图片加个缓存名称
String checkcodeUrl = request.getParameter("url").toString();  //此图片的地址

String checkCodeImg="a";
String secretcode = "";
	try{
		checkCodeImg = ImagePreProcess.downloadImage(checkcodeUrl+"?", name+".png");				 
	}catch(Exception e){
		}
	if (checkCodeImg != "a" ||checkCodeImg != null ) {
		secretcode = ImagePreProcess.getAllOcr(checkCodeImg);
		File ml =new File(checkCodeImg);
		ml.delete();
		out.print(secretcode);

我们来测试一下

http://yzm.vnoon.cn:8080/WebRoot/yzm.jsp?c=312fz&url=http://61.142.33.204/CheckCode.aspx

注意:若非正方教务平台的请改这里的值

正方教务系统验证码识别 - 第1张  | Vnoon

众所周知,验证码需要加入cookie去获取,所以我单独写了一个php的请求验证码:

	//获取验证码图片
	$cookie = dirname(__FILE__) . '/cookie/'.$_SESSION['id'].'.dat';   
	$verify_code_url = "http://210.44.64.154/CheckCode.aspx";//改成你们学校验证码地址
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $verify_code_url);
	curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
	curl_setopt($curl, CURLOPT_HEADER, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_TIMEOUT,45);
	curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept-Encoding:gzip'));//开启Gzip提升数据传输速度
	curl_setopt($curl, CURLOPT_ENCODING, "gzip");
	$img = curl_exec($curl);
	curl_close($curl);
	unlink($cookie);//删除文件

	//解决高并发读写文件冲突
	$file= "./vcode/code.jpg";
	if($fp = fopen($file,"w")) {
		$startTime = microtime();
		//1ms检查一次,超时释放,防止死锁
		do {
			$canWrite = flock($fp, LOCK_EX);
			if(!$canWrite) usleep(round(rand(0, 100)*1000));
		   } while((!$canWrite)&& ((microtime()-$startTime) < 1000));
		if ($canWrite) {
				fwrite($fp,$img);
			}
		flock($fp,LOCK_UN);
		fclose($fp);
		}

然后用保存在服务器的图片,用PHP请求识别:

//验证码自动识别    
	$l="http://yzm.vnoon.cn:8080/WebRoot/yzm.jsp?c=312fz&url=http://yzm.vnoon.cn/vcode/code.jpg";
	$ch=curl_init();
	curl_setopt($ch, CURLOPT_URL,$l);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	$yyy=curl_exec($ch);
	curl_close($ch);
	
	echo substr($yyy,-4);

返回的直接是识别出来的验证码。

正确率比对地址:

http://yzm.vnoon.cn

有什么问题可以留言

最后编辑:
作者:vnoon
一个不爱学习的电气专业学生,一个不务正业的程序猿
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

3 Responses to 正方教务系统验证码识别

  1. sss says:

    厉害,转了

  2. ansion says:

    怎么不能用了呢

留下一个回复

你的email不会被公开。