人一生这一辈子,能记住多少事?还是写下来的好。 注册 | 登陆
浏览模式: 标准 | 列表2009年10月的文章

【转】谈谈验证码识别技术

由于现在很多网站,为了加强安全性,以及防止程序的自动操作网站,都加入的了验证码技术。但却给广大站长推广宣传网站带来的麻烦。所以我准备写这篇关于验证码识别技术的文章,不足之处在所难免!本人从来不写东西,今天为了想落伍才写了!

     广大站长宣传推广自己的网站,经常要发布一些宣传广告,如果靠人工,太慢太昂贵,所以理想的办法是使用群发软件,可现在很多网站都有验证码,这成为群发软件的技术难点,而识别也就难点中的难点,好的,闲话少说,言归正传!

    我举的例子是比较难于识别的验证码,不讨论不变形、不换字体、不换大小、不旋转的验证码,这里我可能不会写出代码,只是提供我编写的思路,按照这个思路,我写出的程序,比市场上出售的程序的识别率还要高很多。(有兴趣的可以问我,我不想在这里帮别人宣传,呵呵~~)

    首先以数字验证码开始,字母的要比数字麻烦一些,不过搞清楚了数字验证码的识别,字母的也就不难了。

    验证码一般都是图片,而且一般都是4位数,处理过程是:先分割为4个部分,然后逐一识别,由于分割比较简单,我这里就不说了,我这里只说如何识别。

    我的方法是把需要识别的图片,划分为 5 行,3 列,15个块,为什么要划分为15个块呢?先看图!
○■○
■○■
■○■
■○■
○■○

○■○
■■○
○■○
○■○
■■■

■■■
○○■
■■■
■○○
■■■

■■■
○○■
■■■
○○■
■■■
我先举这4个例子吧,其余的大家可以自己画出来。如果做过验证码识别的朋友,肯定很快就明白为什么划分为15个块,其实主要就是因为这样划分更合理,也就更能提高识别率。

    我的方法是把需要识别的图片,划分为 5 行,3 列,15个块,然后对每个块进行计算,当每个块里的有效象素超过多少百分比的时候,就标记为 ■,如果没超过就标记为○,(这里为了显示方便我使用了■,○,你完全可以把它标为1、0),这里要注意一下,这里的百分比根据字体的粗细可以取 67%,50%,33%,20%,为什么要取这几个数?主要和计算机的浮点数运算有关,选这几个数,运算更快,且不容易出错,否则计算机在进行大量计算时也是会出错的!当然这里,你完全可以选适合你的验证码图片的百分比!!

    如果验证码不变形、不换字体、不换大小、不旋转,我们的识别工作到这一步基本上就结束了,因为已经可以得到比较清晰的块图,对付大多数论坛,就已经足够了。^_^

   如果验证码的变形比较大、且有很多字体、大小也不固定、且有旋转,那么我们经过划分、取比率显示后,可能会得到这样一个图:
○■○
○○■
○■○
■○○
■■■
    那么这个数字应该是什么数字,我们需要使用排除法!排除所有不可能,在0123456789中,这个图不可能是013456789,他只能是 :2。

    写过验证码识别的朋友可能已经明白了!是的,我们需要建立一个类似的数据库,也就是识别库,出现哪些图,他就属于那个数字。
   再举一个例子:
○■○
■○○
■■■
■○■
○■○
     这是什么?,没错

     我这里我需要再说明一下为什么要取5行,3列,15个块,因为块太多了你 的识别库就会很大,块太少了,就会出现很多分不清楚的块图。

    另外你取的百分比也需要注意,不能太大也不能太小。

     好了,等做好自己的数据库,这时就可以识别大部分数字了。

    最后还有一个问题,就是重复的问题,比如,图片上的数字,明明是 5,可由于它的字体不是常见的字体,且发生了旋转,最后得到这样一个图:
■■■
■○○
■■■
■○■
■■■
   在我的数据库里,这个块图,是6,也是就说识别错误,怎么办?

    我的解决方法是,在数据库里先把这条数据删除因为这个是错误的。

    遇到这种情况,就需要进行二次处理,我的方法是:降低百分比,这时就得到了:
■■○
■○○
■■○
○○■
■■○
     OK,经过降低百分比,图片就由“6”又变为“5”了,呵呵~~~由于降低了百分比,我们需要再建立一个识别库的来存储这些数据。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ycyangcai/archive/2007/06/20/1658896.aspx

Tags: 验证码识别

Dreamhost免费主机申请

Joy-IDC.cn 开放免费主机申请了,可以免费申请到Dreamhost的空间。

免费主机业务,为JOYIDC推出的一项主机服务,首次使用期限为7天,一个账户只能申请一个免费主机,当前此业务为试运营阶段,欢迎大家试用。

1. 免费主机必须挂上广告代码以保证可以持续使用。
         2. 广告代码的周展示量现在暂定为IP为100个,PV为500个则认为是有效用户,否则将视为无效用户。
         3. 对于有效用户,每次系统检查有效性完毕后将自动延长7天使用期。无效用户将会被删除免费主机以回收系统资源。
         4. 免费主机不能续费,如果需要把免费主机转换成为收费主机,请与客服人员联系。
         5. “广告赚时长”的功能对于收费用户一样适用。只要您挂了广告代码在您的网站上,被系统认为是有效用户后,一样可以使你的使用期限延长。
         6. 广告代码可以放置到任何页面,但是首页第一屏必须放有广告代码,对于审查时发现首页没有放置广告代码的用户将会直接删除免费主机服务。
         7. 解释权归醉汉工作室所有。
FAQ:
  1. 如何延长我的免费主机使用期限呢?
      答:请在会员中心-》主机管理-》广告 中获取您的广告代码放于您的网站第一屏,当前的广告代码只有468X60一种大小可以选用。对于没有正确放置广告代码的用户,将不能延长使用期限。只要广告代码设置正确,将可以无限继续使用。

 

详情请见:http://www.joy-idc.cn/?action=freehost&app=default&mod=index

 

 

Tags: 免费主机

PHP中如何发送HEADER头消息

PHP中我们经常需要通过HEADER发送HTTP标头消息,以便告诉浏览器一些处理状态(Status)或显示参量,最典型的就是发送页面处理HEADER和发送状态HEADER。
无论是发送哪种HEADER消息,都必须保证在发送HEADER之前没有输出任何信息到终端浏览器。

一、使用HEADER发送文本类型头信息
例1:
<?php
header("Content-Type: text/html; charset=UTF-8");//告知各位观众下面将要输出的文本类型
?>
例 1输出HEADER告诉浏览器将要输出的文本编码格式为UTF-8。这在全页面PHP处理上是必须的,否则可能会引起终端浏览器显示乱码或空白页显示现象。由于PHP指定在HEADER输出前不能有任何输出信息,包括空格,所以当页面运行出现HEADER信息已经发送的提示时候,需要首先检查在 HEADER之前是否输出了某些信息,包括本PHP页面的包含头文件是否输出信息。
如果需要输出文件提示下载可使用如下方法:
<?php
header("Content-type: application/octet-stream");//FILE流
header("Accept-Ranges: bytes");
header("Accept-Length: $filesize");//提示将要接收的文件大小
header("Content-Disposition: attachment; filename=".$fname); //提示终端浏览器下载操作
?>
如果是PDF格式也可用header("Content-type: application/pdf");其它格式类似处理,不过上面的例子是个下载文件流通例,但是指定详细的文本格式似乎对浏览器的默认处理似乎更好,比如让播放器自动播放下载音乐、或PDF编辑器自动打开远程PDF文档等。

附Content-type的MIME类型说明:
 <?php
$mimetypes = array(
        'ez' => 'application/andrew-inset',
        'hqx' => 'application/mac-binhex40',
        'cpt' => 'application/mac-compactpro',
        'doc' => 'application/msword',
        'bin' => 'application/octet-stream',
        'dms' => 'application/octet-stream',
        'lha' => 'application/octet-stream',
        'lzh' => 'application/octet-stream',
        'exe' => 'application/octet-stream',
        'class' => 'application/octet-stream',
        'so' => 'application/octet-stream',
        'dll' => 'application/octet-stream',
        'oda' => 'application/oda',
        'pdf' => 'application/pdf',
        'ai' => 'application/postscript',
        'eps' => 'application/postscript',
        'ps' => 'application/postscript',
        'smi' => 'application/smil',
        'smil' => 'application/smil',
        'mif' => 'application/vnd.mif',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        'wbxml' => 'application/vnd.wap.wbxml',
        'wmlc' => 'application/vnd.wap.wmlc',
        'wmlsc' => 'application/vnd.wap.wmlscriptc',
        'bcpio' => 'application/x-bcpio',
        'vcd' => 'application/x-cdlink',
        'pgn' => 'application/x-chess-pgn',
        'cpio' => 'application/x-cpio',
        'csh' => 'application/x-csh',
        'dcr' => 'application/x-director',
        'dir' => 'application/x-director',
        'dxr' => 'application/x-director',
        'dvi' => 'application/x-dvi',
        'spl' => 'application/x-futuresplash',
        'gtar' => 'application/x-gtar',
        'hdf' => 'application/x-hdf',
        'js' => 'application/x-javascript',
        'skp' => 'application/x-koan',
        'skd' => 'application/x-koan',
        'skt' => 'application/x-koan',
        'skm' => 'application/x-koan',
        'latex' => 'application/x-latex',
        'nc' => 'application/x-netcdf',
        'cdf' => 'application/x-netcdf',
        'sh' => 'application/x-sh',
        'shar' => 'application/x-shar',
        'swf' => 'application/x-shockwave-flash',
        'sit' => 'application/x-stuffit',
        'sv4cpio' => 'application/x-sv4cpio',
        'sv4crc' => 'application/x-sv4crc',
        'tar' => 'application/x-tar',
        'tcl' => 'application/x-tcl',
        'tex' => 'application/x-tex',
        'texinfo' => 'application/x-texinfo',
        'texi' => 'application/x-texinfo',
        't' => 'application/x-troff',
        'tr' => 'application/x-troff',
        'roff' => 'application/x-troff',
        'man' => 'application/x-troff-man',
        'me' => 'application/x-troff-me',
        'ms' => 'application/x-troff-ms',
        'ustar' => 'application/x-ustar',
        'src' => 'application/x-wais-source',
        'xhtml' => 'application/xhtml+xml',
        'xht' => 'application/xhtml+xml',
        'zip' => 'application/zip',
        'au' => 'audio/basic',
        'snd' => 'audio/basic',
        'mid' => 'audio/midi',
        'midi' => 'audio/midi',
        'kar' => 'audio/midi',
        'mpga' => 'audio/mpeg',
        'mp2′ => 'audio/mpeg',
        'mp3′ => 'audio/mpeg',
        'aif' => 'audio/x-aiff',
        'aiff' => 'audio/x-aiff',
        'aifc' => 'audio/x-aiff',
        'm3u' => 'audio/x-mpegurl',
        'ram' => 'audio/x-pn-realaudio',
        'rm' => 'audio/x-pn-realaudio',
        'rpm' => 'audio/x-pn-realaudio-plugin',
        'ra' => 'audio/x-realaudio',
        'wav' => 'audio/x-wav',
        'pdb' => 'chemical/x-pdb',
        'xyz' => 'chemical/x-xyz',
        'bmp' => 'image/bmp',
        'gif' => 'image/gif',
        'ief' => 'image/ief',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpeg',
        'jpe' => 'image/jpeg',
        'png' => 'image/png',
        'tiff' => 'image/tiff',
        'tif' => 'image/tiff',
        'djvu' => 'image/vnd.djvu',
        'djv' => 'image/vnd.djvu',
        'wbmp' => 'image/vnd.wap.wbmp',
        'ras' => 'image/x-cmu-raster',
        'pnm' => 'image/x-portable-anymap',
        'pbm' => 'image/x-portable-bitmap',
        'pgm' => 'image/x-portable-graymap',
        'ppm' => 'image/x-portable-pixmap',
        'rgb' => 'image/x-rgb',
        'xbm' => 'image/x-xbitmap',
        'xpm' => 'image/x-xpixmap',
        'xwd' => 'image/x-xwindowdump',
        'igs' => 'model/iges',
        'iges' => 'model/iges',
        'msh' => 'model/mesh',
        'mesh' => 'model/mesh',
        'silo' => 'model/mesh',
        'wrl' => 'model/vrml',
        'vrml' => 'model/vrml',
        'css' => 'text/css',
        'html' => 'text/html',
        'htm' => 'text/html',
        'asc' => 'text/plain',
        'txt' => 'text/plain',
        'rtx' => 'text/richtext',
        'rtf' => 'text/rtf',
        'sgml' => 'text/sgml',
        'sgm' => 'text/sgml',
        'tsv' => 'text/tab-separated-values',
        'wml' => 'text/vnd.wap.wml',
        'wmls' => 'text/vnd.wap.wmlscript',
        'etx' => 'text/x-setext',
        'xsl' => 'text/xml',
        'xml' => 'text/xml',
        'mpeg' => 'video/mpeg',
         'mpg' => 'video/mpeg',
        'mpe' => 'video/mpeg',
        'qt' => 'video/quicktime',
        'mov' => 'video/quicktime',
        'mxu' => 'video/vnd.mpegurl',
        'avi' => 'video/x-msvideo',
        'movie' => 'video/x-sgi-movie',
        'ice' => 'x-conference/x-cooltalk',
);
?>

二、使用HEADER发送状态(Status)信息
当我们在响应浏览器操作时候,可能需要输出一些提示状态信息,比如访问的文件不存(404状态)在或者文件被转移(301状态)等,告诉用户(包括搜索引擎)所访问页面的当前状态,这在实际使用中对站长非常重要,因为这直接影响到搜索引擎对当前页面的判定。当前对于301固定转移(HTTP/1.1 301 Moved Permanently)我们也可以采用其它方式(.htaccess或IIS重定向),但是了解PHP自编程解决这些页面状态提示会加深自己对浏览器状态的认知。
HEADER状态消息头格式如下:
header("第一部分 第二部分 第三部分");
其中第一部分为HTTP协议的版本号(HTTP-Version),第二部分为将要发送的状态代码(Status),第三部分为状态原因(Reason-Phrase) ,三部分中间用一个空格分割,第一部分和第二部分都是必需,第三部分的状态原因为可选项,一般推荐按照标准写出(参下文)。
例2:
<?php
header("HTTP/1.1 404 Not Found");
?>
例2实际在使用中很少用到的,感觉有点忽悠终端浏览者的意思。
最经常遇到是下面的例3:
<?php
header("HTTP/1.1 301 Moved Permanently");//301永久迁移
header("Location: http://www.metsky.com");//跳转新URL地址,默认Location可能会发送302头,笔者暂不确定。
?>
此语句告诉搜索引擎或浏览者,本页面已经被“蚂蚁搬家”了,走,我带你看看新家去(新网页)。更多关于301重定向的内容请参考完美解决IIS和APACHE的301重定向一文。

下面专门把W3上Header状态代码(Status)罗列一下供各位使用参考:
1、状态码类(Status)定义
1xx类:Informational - Request received, continuing process(信息状态码类:请求已收到,继续处理)
2xx类:Success - The action was successfully received, understood,and accepted(成功状态码类:本次操作已收到并处理OK)
3xx类:Redirection - Further action must be taken in order to complete the request (重定向状态码类:完成请求前必须进一步执行操作)
4xx类:Client Error - The request contains bad syntax or cannot be fulfilled(发往客户端的错误状态码类:请求包含语法错误或请求不能完成)
5xx类:Server Error - The server failed to fulfill an apparently valid request (服务器端的错误状态码类:服务器执行合法请求失败)

2、常用状态码(Status)列表(部分):
| "100" ; Continue
| "101" ; Switching Protocols

| "200" ; OK
| "201" ; Created
| "202" ; Accepted
| "203" ; Non-Authoritative Information
| "204" ; No Content
| "205" ; Reset Content
| "206" ; Partial Content

| "300" ; Multiple Choices
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "303" ; See Other
| "304" ; Not Modified
| "305" ; Use Proxy
| "400" ; Bad Request
| "401" ; Unauthorized
| "402" ; Payment Required
| "403" ; Forbidden
| "404" ; Not Found
| "405" ; Method Not Allowed
| "406" ; Not Acceptable
| "407" ; Proxy Authentication Required
| "408" ; Request Time-out
| "409" ; Conflict
| "410" ; Gone
| "411" ; Length Required
| "412" ; Precondition Failed
| "413" ; Request Entity Too Large
| "414" ; Request-URI Too Large
| "415" ; Unsupported Media Type

| "500" ; Internal Server Error
| "501" ; Not Implemented
| "502" ; Bad Gateway
| "503" ; Service Unavailable
| "504" ; Gateway Time-out
| "505" ; HTTP Version not supported

另外我们还可以使用PHP 的HEADER发送一些缓存参数命令、超期命令等,例如:
<?php
header("Cache-Control: no-cache, must-revalidate"); //不要缓存
header("Expires: Fri, 1 Dec 2099 08:00:00 GMT"); // 页面过期时间
?>
在使用起来要简单一点,不再多讲,OVER,闪人。

Tags: php, header

终于把viva的ROM给备份出来了,马上进行分享

1、首先下载工具。
itsutilsbin点击打开下载:解压后放个容易找的地方。
ActiveSync点击打开下载:要安装同步软件
解锁软件:


2、解锁

电脑端解锁

安装好同步软件后,连接手机和电脑。同步连接成功后,开始在电脑端进行解锁。

 


解锁成功,重启手机。


手机端解锁
1、把SPUnlock拷到手机任意目录下
2、直接在手机上运行
3、等待5秒,显示解锁成功即可
进到刚才解压的提取rom工具。这里放到C盘,文件夹改名为itsutilsbin。
在开始菜单》运行》输入“cmd”

XML/HTML代码
  1. cmd   
  2. cd \   
  3. cd itsutilsbin  

 

3、开始提取。

 

XML/HTML代码
  1. pdocread -l  

 

 

XML/HTML代码
  1. pdocread -w -d MSFLASH -p Part00 0 0x12bc00 part00.raw   
  2. pdocread -w -d MSFLASH -p Part01 0 0x180000 part01.raw   
  3. pdocread -w -d MSFLASH -p Part02 0 0x3330000 part02.raw   
  4. pdocread -w -d MSFLASH -p Part03 0 0x4870000 part03.raw  

 

这里的MSFLASH根据第一步-l的情况进行更改。
这里的0x12bc00、0x180000、0x3330000、0x4870000就是Part00-03的长度,根据自己的机器进行更改。具体命令的解释请看一楼的命令解说。

下面是提取金鹏m9i的rom的命令行记录。

 

XML/HTML代码
  1. C:\itsutilsbin>pdocread -l   
  2.   
  3. 127.28M (0x7f48000) MSFLASH   
  4.   
  5. |           1.17M (0x12bc00) Part00   
  6.   
  7. |           1.50M (0x180000) Part01   
  8.   
  9. |          51.19M (0x3330000) Part02   
  10.   
  11. |          72.44M (0x4870000) Part03   
  12.   
  13.   1.83G (0x75400000) DSK1:   
  14.   
  15. |           1.83G (0x753eee00) Part00   
  16.   
  17. STRG handles:   
  18.   
  19. handle 87ba8df2  1.83G (0x753eee00)   
  20.   
  21. handle 27b1ef7a 72.44M (0x4870000)   
  22.   
  23. handle 27b1e536 51.19M (0x3330000)   
  24.   
  25. handle a7b1e512  1.50M (0x180000)   
  26.   
  27. handle e7b1e3ea  1.17M (0x12bc00)   
  28.   
  29. disk 87ba8df2   
  30.   
  31. 0 partitions, 0 binary partitions   
  32.   
  33. customerid=00000000 uniqueid00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   
  34.   
  35. disk 27b1ef7a   
  36.   
  37. 0 partitions, 0 binary partitions   
  38.   
  39. customerid=00000000 uniqueid00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   
  40.   
  41. disk 27b1e536   
  42.   
  43. 0 partitions, 0 binary partitions   
  44.   
  45. customerid=00000000 uniqueid00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   
  46.   
  47. disk a7b1e512   
  48.   
  49. 0 partitions, 0 binary partitions   
  50.   
  51. customerid=00000000 uniqueid00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   
  52.   
  53. disk e7b1e3ea   
  54.   
  55. 0 partitions, 0 binary partitions   
  56.   
  57. customerid=00000000 uniqueid00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00   
  58.   

 

XML/HTML代码
  1. C:\itsutilsbin>pdocread -w -d MSFLASH -p Part00 0 0x12bc00 part00.raw   
  2.   
  3. CopyTFFSToFile(0x0, 0x12bc00, part00.raw)   
  4.   
  5. C:\itsutilsbin>pdocread -w -d MSFLASH -p Part01 0 0x180000 part01.raw   
  6.   
  7. CopyTFFSToFile(0x0, 0x180000, part01.raw)   
  8.   
  9. C:\itsutilsbin>pdocread -w -d MSFLASH -p Part02 0 0x3330000 part02.raw   
  10.   
  11. CopyTFFSToFile(0x0, 0x3330000, part02.raw)   
  12.   
  13. C:\itsutilsbin>pdocread -w -d MSFLASH -p Part03 0 0x4870000 part03.raw   
  14.   
  15. CopyTFFSToFile(0x0, 0x4870000, part03.raw)   
  16.   


这样就可以在C:\itsutilsbin目录里得到4个part。

如果提取的时候提示

 

XML/HTML代码
  1. Error:ITREADDISK:READ 00000000 BYTES -参数不正确   

复制代码这时需要指定扇区的大小了,默认是0x200,另外一个常用的大小是0x800
如:

 

XML/HTML代码
  1. pdocread -b 0x800 -w -d MSFLASH -p Part00 0 0x13f000 part00.raw  

 

 

Tags: 手机, rom备份

PHP算法的性能测试

呵呵~今天进行了一些关于字符串组装与if与三目运算的和逻辑运算的测试。结果是

 

逻辑运算的分支处理速度高于if高于三目

 

而字符串组装,在数组小于3个时,用字符串连接的速度快些,但大于3时,用数组后用implode的速度快。

» 阅读全文

Tags: php, 效率测试

WM6.1电话,短信,闹钟铃声设置

  1. 在卡的目录里新建一个“我的铃声”文件夹,把MP3放进去,在电话铃声设置里就能找到你的歌了,(短信不行,看下一个方法)
  2. 或在卡的目录里新建一个“My Documents"文件夹,把MP3放进去,那么在电话铃声和短信铃声设置里都能找到你的歌了(推荐这种)
  3. 闹钟钤声只有把你的歌曲转换成WAV格式后放在Windos的目录下就在闹钟设置里看到我的铃声了,因为闹钟只识别WAV格式

Tags: 手机