一种生成图片验证码的方法及装置制造方法

文档序号:7808138阅读:254来源:国知局
一种生成图片验证码的方法及装置制造方法
【专利摘要】本发明公开了一种生成图片验证码的方法及装置。所述装置包括:验证码生成器,适于根据输入的干扰强度级别生成预定数目个具有该干扰强度级别的图片验证码;验证码识别器,适于对所述预定数目个图片验证码进行识别;识别率计算单元,适于计算验证码识别器对预定数目个图片验证码进行识别的验证码识别正确率;设置单元,适于输出预定干扰强度级别到验证码生成器,并在识别率计算单元计算得到的验证码识别正确率低于预设门限时,将当前预定干扰强度级别设置为生效干扰强度级别,以供验证码生成器生成具有该生效干扰强度级别的图片验证码提供给客户端。本发明实现了在保证用户使用方便的前提下,降低图片验证码被验证码识别软件破解的概率。
【专利说明】-种生成图片验证码的方法及装置

【技术领域】
[0001] 本发明涉及互联网【技术领域】,具体涉及一种生成图片验证码的方法及装置。

【背景技术】
[0002] 随着互联网的高速发展,在网络给人们提供了丰富资源的同时,网络的安全问题 也日渐突出,验证码技术便应运而生。网站图片验证码的设计目的是通过利用人脑的不可 模拟性,来防止恶意软件对网站进行大量的恶意自动操作。但是一个比较简单的图片验证 码很容易会被验证码识别软件所破解。对于有经验的黑客来说,简单的图片验证码技术除 了增加网站的流量以外,就形同虚设。所以只有设计出较复杂的不易被破解的图片验证码 才能真正有效地保证网络站点的安全。
[0003] 但是,如果图片验证码设计的太复杂,会加大人眼识别的难度,在用户的友好性上 做的不好。因此,如何兼顾用户使用的方便和降低图片验证码被验证码识别软件破解的概 率,就成为亟待解决的技术问题。


【发明内容】

[0004] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上 述问题的生成图片验证码的方法及装置。
[0005] 根据本发明的一个方面,提供了一种生成图片验证码的装置,所述装置包括:
[0006] 验证码生成器,适于根据输入的干扰强度级别生成预定数目个具有该干扰强度级 别的图片验证码;
[0007] 验证码识别器,适于对验证码生成器生成的预定数目个图片验证码进行识别;
[0008] 识别率计算单元,适于计算验证码识别器对预定数目个图片验证码进行识别的验 证码识别正确率;以及
[0009] 设置单元,适于输出预定干扰强度级别到验证码生成器,并接收识别率计算单元 计算得到的验证码识别正确率,并在识别率计算单元计算得到的验证码识别正确率低于预 设门限时,将当前预定干扰强度级别设置为验证码生成器的生效干扰强度级别,以供验证 码生成器生成具有该生效干扰强度级别的图片验证码提供给客户端。
[0010] 可选地,所述验证码生成器进一步适于:
[0011] 根据输入的干扰强度级别确定与该干扰强度级别对应的干扰因素;
[0012] 根据所确定的干扰因素生成图片验证码。
[0013] 可选地,所述干扰因素包括如下的一个或一个以上的组合:
[0014] 验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最大角度值、字符 扭曲变形的程度和字符间的粘连程度。
[0015] 可选地,所述识别率计算单元进一步适于:
[0016] 获取验证码识别器所识别出的预定数目个验证字符串;
[0017] 将识别出的每个验证字符串与对应的原始验证字符串进行比较,确定该验证字符 串是否正确;
[0018] 根据正确的字符串数目和所述预定数目之间的比率,得到验证码识别正确率。
[0019] 可选地,所述预设门限为15 %?25%。
[0020] 根据本发明的另一方面,提供了一种生成图片验证码的方法,所述方法包括:
[0021] 设置预定干扰强度级别并输入到验证码生成器;
[0022] 由验证码生成器根据输入的干扰强度级别生成预定数目个具有该干扰强度级别 的图片验证码;
[0023] 由验证码识别器对验证码生成器生成的预定数目个图片验证码进行识别;
[0024] 计算验证码识别器对预定数目个图片验证码进行识别的验证码识别正确率;以及
[0025] 当计算得到的验证码识别正确率低于预设门限时,将当前干扰强度级别设置为验 证码生成器的生效干扰强度级别,以供验证码生成器生成具有该生效干扰强度级别的图片 验证码提供给客户端;
[0026] 当计算得到的验证码识别正确率不低于上述预设门限时,增加所述预定干扰强度 级别,并输入到验证码生成器。
[0027] 可选地,所述根据输入的干扰强度级别生成预定数目个具有该干扰强度级别的图 片验证码,包括:
[0028] 根据输入的干扰强度级别确定与该干扰强度级别对应的干扰因素;
[0029] 根据所确定的干扰因素生成图片验证码。
[0030] 可选地,所述干扰因素包括如下的一个或一个以上的组合:
[0031] 验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最大角度值、字符 扭曲变形的程度和字符间的粘连程度。
[0032] 可选地,所述计算验证码识别器对预定数目个图片验证码进行识别的验证码识别 正确率,包括:
[0033] 获取验证码识别器所识别出的预定数目个验证字符串;
[0034] 将识别出的每个验证字符串与对应的原始验证字符串进行比较,确定该验证字符 串是否正确;
[0035] 根据正确的字符串数目和所述预定数目之间的比率,得到验证码识别正确率。
[0036] 可选地,所述预设门限为15 %?25%
[0037] 根据本发明的生成图片验证码的方案,按照预定干扰强度级别来生成预定数目个 图片验证码,采用验证码识别软件对生成的图片验证码进行自动识别,并计算各干扰强度 级别下的验证码识别正确率,当验证码识别正确率低于预设门限时,将当前干扰强度级别 设置为生效干扰强度级别,当验证码识别正确率不低于上述预设门限时,增加所述预定干 扰强度级别,如此,即能够保证根据该生效干扰强度级别生成的图片验证码容易被人眼识 另IJ,从而提升用户体验,也能够降低图片验证码被验证码识别软件破解的概率,从而提高网 络安全性。
[0038] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够 更明显易懂,以下特举本发明的【具体实施方式】。

【专利附图】

【附图说明】
[0039] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0040] 图1示出了根据本发明一个实施例的生成图片验证码的系统的结构图;
[0041] 图2示出了根据本发明一个实施例的生成图片验证码的装置的结构图;以及
[0042] 图3示出了根据本发明一个实施例的生成图片验证码的方法的流程图。

【具体实施方式】
[0043] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开 的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围 完整的传达给本领域的技术人员。
[0044] 图1示出了根据本发明一个实施例的生成图片验证码的系统的结构图。如图1所 示,生成图片验证码的系统包括多个客户端11〇(图中示出了 3个)、为这些客户端110提供 各种网络资源的服务器端120,客户端110和服务器端120经由互联网络而相互通信。
[0045] 在本发明实施例中,客户端110可以是本领域任何可以呈现从服务器端120获取 的网络资源的设备,包括但不限于桌面型计算机、笔记本式计算机、个人数字助理、智能移 动终端和平板电脑等。客户端110具有操作系统,利用操作系统来管理客户端110中的硬 件资源,操作系统上运行有浏览器,所述浏览器能够呈现从服务器端120获取的网络资源。
[0046] 服务器端120包括但不限于网络主机、单个网络服务器、多个网络服务器集或多 个服务器构成的云。在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器 构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟 计算机。
[0047] 服务器端120具有生成图片验证码的装置200。服务器端120获取到用户通过客 户端110在访问页面中提交的验证请求时,由所述生成图片验证码的装置200根据所述验 证请求生成图片验证码,并将所生成的图片验证码提供至客户端110上的所述访问页面。
[0048] 生成图片验证码的装置200可以生成不同干扰强度级别的图片验证码,干扰强度 级别越高,生成的图片验证码被自动破解的难度级别就越高,但是,如果图片验证码设计的 太复杂,会加大人眼识别的难度,在用户的友好性上做的不好。因此,为兼顾用户使用的方 便和降低图片验证码被验证码识别软件破解的概率,本发明实施例的生成图片验证码的装 置200会根据预定干扰强度级别来生成预定数目个图片验证码,采用验证码识别软件对生 成的图片验证码进行自动识别,并计算各干扰强度级别下的验证码识别正确率,当验证码 识别正确率低于预设门限时,将当前干扰强度级别设置为生效干扰强度级别,当验证码识 别正确率不低于上述预设门限时,增加所述预定干扰强度级别,如此,即能够保证根据该生 效干扰强度级别生成的图片验证码容易被人眼识别,从而提升用户体验,也能够降低图片 验证码被验证码识别软件破解的概率,从而提高网络安全性。
[0049] 图2示出了根据本发明一个实施例的生成图片验证码的装置200的结构图。所述 生成图片验证码的装置200设置在服务器端120中,适于根据客户端110在访问页面中提 交的验证请求生成图片验证码,并将所生成的图片验证码提供至客户端110上的所述访问 页面。
[0050] 参照图2,所述生成图片验证码的装置包括验证码生成器210、验证码识别器220、 识别率计算单元230和设置单元240。
[0051] 验证码生成器210适于根据输入的干扰强度级别生成预定数目个具有该干扰强 度级别的图片验证码。其中,所述干扰强度级别由设置单元240输出到验证码生成器210。
[0052] 验证码生成器210首先根据输入的干扰强度级别确定与该干扰强度级别对应的 干扰因素,然后根据所确定的干扰因素来生成图片验证码。其中,影响图片验证码的复杂度 的干扰因素主要包括:验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最大 角度值、字符扭曲变形的程度和字符间的粘连程度。当然,除了以上所列举的干扰因素之 夕卜,还有一些干扰因素也会影响到图片验证码的复杂度,本发明实施例对具体采用的干扰 因素不做限制。
[0053] 验证码生成器210会根据验证字符集随机产生一个验证字符串,并将产生的验证 字符串保存在例如内存中。验证字符数目是所述验证字符串中所包括的验证字符的数目, 所述验证字符可以是数字、字母,甚至是汉字等。后续,会根据所产生的验证字符串以及其 他干扰因素来生成图片验证码。验证字符数目越大,则所生成的图片验证码的复杂度越高。
[0054] 在生成图片验证码时,可以在图片中添加一些噪声点,噪声点的位置在图片中随 机分布。噪声点数目越大,则所生成的图片验证码的复杂度越高。
[0055] 在生成图片验证码时,可以在图片中添加一些噪声线,噪声线的位置在图片中随 机分布。噪声线数目越大,则所生成的图片验证码的复杂度越高。
[0056] 在生成图片验证码时,可以对图片中的各验证字符进行旋转,旋转的角度可以随 机产生,但不大于所设置的最大角度值。字符随机角度旋转的最大角度值越大,则所生成的 图片验证码的复杂度越高。
[0057] 在生成图片验证码时,可以对图片中的各验证字符进行扭曲变形,字符扭曲变形 的程度可以为一般、较大、严重。字符扭曲变形的程度越大,则所生成的图片验证码的复杂 度越高。
[0058] 在生成图片验证码时,可以使得图片中的各验证字符进行粘连,字符间的粘连程 度可以为一般、较大、严重。字符间的粘连程度越大,则所生成的图片验证码的复杂度越高。
[0059] 在本发明实施例中,会预先建立干扰强度级别与干扰因素组合的映射关系,即一 种级别的干扰强度级别对应一种干扰因素组合,且干扰强度级别越高,所生成的图片验证 码的复杂度也越高,也就越不容易被验证码识别软件所破解。例如,干扰强度级别1对应的 干扰因素组合为{:验证字符数目为4,噪声点数目为30,字符扭曲变形的程度为一般},干扰 强度级别2对应的干扰因素组合为{:验证字符数目为4,噪声点数目为50,字符随机角度旋 转的最大角度值为30度,字符扭曲变形的程度为一般},干扰强度级别3对应的干扰因素组 合为{:验证字符数目为4,噪声点数目为50,噪声线数目为4,字符随机角度旋转的最大角度 值为45度,字符扭曲变形的程度为较大,字符间的粘连程度为一般},……,。需要说明的 是,本发明实施例对干扰强度级别与干扰因素组合的具体映射关系不做限制,本领域技术 人员可以根据经验或者需要合理设置。
[0060] 验证码生成器210生成图片验证码的示例性代码如下:
[0061] /// <summary> ///生成验证字符数目 Hi </summary> /7/ <param name="length">验证字符数目 </param> /// <rcturns></rclurns> private siring CrcaleRandomCodcfint length) { int rand;
[0062] char code; siring randomcodc _ Siring.Fmpiy; //生成验证字符串,长度为length Sysicm.Random random = new Random(); for (int i = 0: i < length; i++) { rand = random.Ncxi(); if (rand % 3 == 0) { code = (char)('A' + (char)(rand % 26)): } else { code (char)(,0! + (char)(rand % 10)): } randomcodc += codc.ToSlringO; } rclurn randomcodc; } /// <summary> ///创建图片 /// </summary> /// <param namc="randomcodc">l:4;^^j</param> private void Crcalc!magc(slring randomcodc) { int randAngle = 45; //随机转动角度最大值 int mapwidth = (inl){randomcodc.Length ^ 16); Bitmap map = new Bitmap(mapwidth, 28); //创建图片背景,设置其长 宽 Graphics graph = Graphics.FromImagc(map); graph.ClcLiriColor.AliccBluc); graph.DrawRcclanglc(ncw Pcn(Color.Black, 0), 0, 0, map.Widlh - 1, map,Height - 1);//画一个边框 Random rand = new Random();
[0063] //生成背景嗓声点 l)cn blacld)en = new t)en(Coloi·丄ightGray, 0}; l、or (irU i = 0; i < 50; it+) i ini x = rand.Ncxt(0. map.Width); int y = rand.Ncxt(0. map.Height); graph,DrawRecLangic(blackPen, x5 y, 1, 1); } /7验证码旋转,防止机器识别 cliar[] chars = randomcodc.ToCharArray();//拆散字符串成单字符数组 //文字距中 SiringFormat format new SiringFormal(SlringFormalFlags.NoClip); I'orniaLAlignment - SlringAlignmcnt.Ccnlcr; format. Line Alignment = SlringAlignmcnLCcnlcr; //定义随机颜色列表 Coloi'LJ c - j Color.Black, Color.Red, Color.DarkBluc. Color.Grcen, Color.Orange, Color.Brown. Color.DarkCyan, Color.Purplc | ; //定义随机字体 string[] font = { "Verdana", "Microsoft Sans Serif', "Comic Sans MS", "Arial","宋体" }; for (inL i = 0; i < chars.Lcngih; i++) { ini cindcx = rand.Ncxl(7); int findex = rancl.Ncxi(5); Font Γ - new System. Dravving.FonidbnlLrindcxJ, 16, System. Drawing.FontStyle.Bold); /7字体样式(参数2为字体大小) Brush b = new SysLern.Drawing.SolidBrush(c[cindcx]); Point dot = new Point(ll? 11); //括号内数值越大,字符间距越 大 float angle = rand.Ncxt(0. randAnglc); // 转动的度数,如果将 0 改为-randAngle,那么旋转角度为-45度?45度 graph,TranslaicTransibrm(dot,X5 dot.Y); graph RotalcTransibrm(anglc);
[0064] graph.Dra\vSlring(chars[i].ToString(),f,b, 2, 6, I'ormal); // 第 4、5 个参数控制左、上间距 graph.Rotate ! ransr〇rrn(-anglc); graph.TranslalcTransr〇rm(2, -dol.Y); } //生成图片 Systcni.IO.McmorySlrccim ms - new System.IO,Mcni〇i'ySlrcani(); map.Savc(ms, System.Drawing.Imaging.IniagcTormat.Gif); Response.CicarContcnt(); Response.CorttcnlTypc = "image/giT; Response. Bi nary Wrile(ms.To A rray〇); graph.Disposc〇; map.Dispose!); }
[0065] 可以看出,根据上述代码,其用于生成图片验证码的干扰因素包括:数目为 length的验证字符,最大角度值为45度的字符随机角度旋转,数目为50的噪声点,以及随 机字符大小、随机字体、随机字符颜色、字符部分重叠。
[0066] 在验证码生成器210根据输入的干扰强度级别生成预定数目个具有该干扰强度 级别的图片验证码之后,由验证码识别器220对这些图片验证码进行识别。所述预定数目 可以根据需要进行设定,例如,所述预定数目为100。
[0067] 在一种实现方式中,对于每个图片验证码,验证码识别器220可以按照如下方式 对其进行识别:
[0068] 首先,获取图片验证码;
[0069] 其次,对该图片验证码进行预处理,主要包括去除图片验证码中的各种噪声(例 如噪声点和噪声线等)和对图片验证码进行黑白化处理以提高对比度;
[0070] 然后,对图片验证码中的字符进行分割;
[0071] 最后,对分割得到的字符进行识别,识别出其中包括的验证字符串。可以采用各种 字符识别软件进行字符识别,例如可以调用Tesseract的teSSnet2_32. dll类库进行所述 字符识别。
[0072] 字符识别的示例性代码如下:
[0073] //对图像进行降噪处理 Bitmap oldlmagc = (Bilmap)pictureBox base.Image; if(oldImagc == null) return; Bitmap image = (Biimap)oldImagc.Clonc(): A Forge. Imaging. I mage. FormaiImagc(rcf image); ini boderWidlh = 1; //裁剪四边 Crop CropFiUcr = new Cmp(ncw Rcctanglc(bodcrVVidLlK boderWidlh. image.Width -boderWidth * 2, image.Height - boderWidlh ^ 2)); image = CropFiUcr.Apply(imagc); //降噪 ConscrvalivcSmoothing csFilter = new ConservativeSmoolhingfConverL ToInt32 (lexiBox.3.Texl)): csFiltcr.ApplylnFMiicc( image); //中值滤波 Median mcdianFillcr = new Mcdian(); mcdianFillcr.ApplylnPlacc( image ); //颜色HSL (色调,饱和度,亮度) BrighmcssCorrcclion bcFiltcr= new BrighlncssCorrcclion((). 15); bcFilicr.ApplylnPlacc(imagc); piclurcBox I .Width = image.Width; piclurcBoxl .Height = image JIcighL; picturcBoxl .Image = image; //对图像进行黑白化处理: Bitmap oldlmagc = (Bitmap)picturcBoxI .Image. i('( oldlmagc = null) return; Bitmap image = (Bittnap)oldImagc.Clonc(); //灰化 Grayscale grayfillcr = new Grayscale( 0.2125d, 0.7154d, 0.0721d ); image = gray filler. Apply( image ); //黑白化
[0074] Threshold thfilter = new Thrcshold(); Lhfillcr.ThrcsholdValuc - Convcrl.TulrU32( icxiBox2.Tcxi ); //设置阀值,把图片黑白化 ihfillcr.ApplvlnPlacc( image ); //收彌 Shrink shrinkFiltcr = new Shrink( Color.Black ); image = shrinkFiltcr.Apply( image ); piclurcBox2.Width - imagc.VVidth; piclurcBox2.Height = image.Height; piclurc3ox2.Image = image; //字符分隔: if(RowNum == 0 || ColNum == 0) return null; int singW - bmpobj.Width / RowNuni; ini singH = bmpobj.Hcighl / ColNum: Bilmap| I PicArray = new BitmapfRowNum ^ ColNum |; RccLanglc cloncRecL; i'or (im i - 0; i < ColNum; it+) { for (ini j = 0; j < RowNum; j++) { cloncRcct - new Rcciang!c(j ^ singW, i ^ singH, singW, singH); Pic/\rray[i * RenvNum + j] =bnipobj.Clone(cloneRecU bmpobj.PixelFormat); } } return PicArray; //字符识别: icssnct2.Tcsscracl ocr - new icssncl2.Tcsscracl〇; ocr.lnit(Application.StartupPalh + (^"Mcssdala", "eng", false); Bitmap image = new Bilmap(picturcliox base.Image); Lisl<tcssncL2.W〇rd> result = ocr.DoOCR(imagt\ Rectangle.Empty); label2.Tcxi _ siring.Fmply; ir(result.Count = 0) {
[0075] label2_Text = " 未识别"; return; } string ocrRcsult = string,Empty; (breach (tcssnet2.Word word in result) { ocrRcsult+= word.Text; / (breach (char c in ocrRcsult) { label2Tcxl += siring.Formal(M JOj ", c); }
[0076] 在验证码识别器220对验证码生成器210生成的预定数目个图片验证码进行识别 后,识别率计算单元230根据识别结果,计算验证码识别正确率。
[0077] 识别率计算单元230首先获取验证码识别器220所识别出的预定数目个验证字符 串,然后,将识别出的每个验证字符串与对应的原始验证字符串(即验证码生成器210在生 成图片验证码的过程中,随机产生并保存在内存中的字符串)进行比较,确定该验证字符 串是否正确,最后,根据正确的字符串数目和所述预定数目之间的比率,得到验证码识别正 确率。
[0078] 设置单元240适于输出预定干扰强度级别到验证码生成器(初始时,采用级别最 低的干扰强度级别),并接收识别率计算单元230计算得到的验证码识别正确率,并在识别 率计算单元230计算得到的验证码识别正确率低于预设门限时,将当前预定干扰强度级别 设置为验证码生成器210的生效干扰强度级别,以供验证码生成器210生成具有该生效干 扰强度级别的图片验证码提供给客户端110。其中,设置单元240可以按照干扰强度级别由 低到高的顺序输出该干扰强度级别到验证码生成器210。
[0079] 其中,所述预设门限可以根据本领域技术人员的经验或者根据实验确定,一般可 以将所述预设门限设置为15 %?25%,例如,将其设置为20%。
[0080] 假设干扰强度级别共有10个级别,设置单元240首先输出干扰强度级别1到验证 码生成器210,验证码生成器210生成了 100个图片验证码,验证码识别器220正确识别出 了其中的60个,则识别率计算单元230计算出的验证码识别正确率为70%,大于预设门限 20 %,需要提高干扰强度级别。
[0081] 下一步,设置单元240输出干扰强度级别2到验证码生成器210,验证码生成器 210生成了 100个图片验证码,验证码识别器220正确识别出了其中的36个,则识别率计算 单元230计算出的验证码识别正确率为36 %,大于预设门限20 %,需要提高干扰强度级别。
[0082] 下一步,设置单元240输出干扰强度级别3到验证码生成器210,验证码生成器 210生成了 100个图片验证码,验证码识别器220正确识别出了其中的18个,则识别率计算 单元230计算出的验证码识别正确率为18%,小于预设门限20%,不需要再提高干扰强度 级别。于是,将干扰强度级别3设置为验证码生成器210的生效干扰强度级别。
[0083] 之后,服务器端120获取到用户通过客户端110在访问页面中提交的验证请求时, 所述验证码生成器210根据该生效干扰强度级别生成具有该生效干扰强度级别的图片验 证码提供给客户端110。如此,即能够保证根据该生效干扰强度级别生成的图片验证码容易 被人眼识别,从而提升用户体验,也能够降低图片验证码被验证码识别软件破解的概率,从 而提商网络安全性。
[0084] 图3示出了根据本发明一个实施例的生成图片验证码的方法的流程图,该方法由 服务器端120执行。
[0085] 参照图3,该方法起始于步骤S302。在步骤S302中,设置预定干扰强度级别(初 始时,采用级别最低的干扰强度级别)并输入到验证码生成器。
[0086] 在步骤S304中,由验证码生成器根据输入的干扰强度级别生成预定数目个具有 该干扰强度级别的图片验证码。首先根据输入的干扰强度级别确定与该干扰强度级别对应 的干扰因素,然后根据所确定的干扰因素来生成图片验证码。其中,影响图片验证码的复杂 度的干扰因素主要包括:验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最 大角度值、字符扭曲变形的程度和字符间的粘连程度。当然,除了以上所列举的干扰因素之 夕卜,还有一些干扰因素也会影响到图片验证码的复杂度,本发明实施例对具体采用的干扰 因素不做限制。
[0087] 验证码生成器会根据验证字符集随机产生一个验证字符串,并将产生的验证字符 串保存在例如内存中。验证字符数目是所述验证字符串中所包括的验证字符的数目,所述 验证字符可以是数字、字母,甚至是汉字等。后续,会根据所产生的验证字符串以及其他干 扰因素来生成图片验证码。验证字符数目越大,则所生成的图片验证码的复杂度越高。
[0088] 在生成图片验证码时,可以在图片中添加一些噪声点,噪声点的位置在图片中随 机分布。噪声点数目越大,则所生成的图片验证码的复杂度越高。
[0089] 在生成图片验证码时,可以在图片中添加一些噪声线,噪声线的位置在图片中随 机分布。噪声线数目越大,则所生成的图片验证码的复杂度越高。
[0090] 在生成图片验证码时,可以对图片中的各验证字符进行旋转,旋转的角度可以随 机产生,但不大于所设置的最大角度值。字符随机角度旋转的最大角度值越大,则所生成的 图片验证码的复杂度越高。
[0091] 在生成图片验证码时,可以对图片中的各验证字符进行扭曲变形,字符扭曲变形 的程度可以为一般、较大、严重。字符扭曲变形的程度越大,则所生成的图片验证码的复杂 度越高。
[0092] 在生成图片验证码时,可以使得图片中的各验证字符进行粘连,字符间的粘连程 度可以为一般、较大、严重。字符间的粘连程度越大,则所生成的图片验证码的复杂度越高。
[0093] 在本发明实施例中,会预先建立干扰强度级别与干扰因素组合的映射关系,即一 种级别的干扰强度级别对应一种干扰因素组合,且干扰强度级别越高,所生成的图片验证 码的复杂度也越高,也就越不容易被验证码识别软件所破解。例如,干扰强度级别1对应的 干扰因素组合为{:验证字符数目为4,噪声点数目为30,字符扭曲变形的程度为一般},干扰 强度级别2对应的干扰因素组合为{:验证字符数目为4,噪声点数目为50,字符随机角度旋 转的最大角度值为30度,字符扭曲变形的程度为一般},干扰强度级别3对应的干扰因素组 合为{:验证字符数目为4,噪声点数目为50,噪声线数目为4,字符随机角度旋转的最大角度 值为45度,字符扭曲变形的程度为较大,字符间的粘连程度为一般},……,。需要说明的 是,本发明实施例对干扰强度级别与干扰因素组合的具体映射关系不做限制,本领域技术 人员可以根据经验或者需要合理设置。
[0094] 在验证码生成器根据输入的干扰强度级别生成预定数目个具有该干扰强度级别 的图片验证码之后,方法进入步骤S306。在步骤S306中,由验证码识别器对这些图片验证 码进行识别。所述预定数目可以根据需要进行设定,例如,所述预定数目为100。
[0095] 对于每个图片验证码,可以按照如下方式对其进行识别:
[0096] 首先,获取图片验证码;
[0097] 其次,对该图片验证码进行预处理,主要包括去除图片验证码中的各种噪声(例 如噪声点和噪声线等)和对图片验证码进行黑白化处理以提高对比度;
[0098] 然后,对图片验证码中的字符进行分割;
[0099] 最后,对分割得到的字符进行识别,识别出其中包括的验证字符串。可以采用各种 字符识别软件进行字符识别,例如可以调用Tesseract的teSSnet2_32. dll类库进行所述 字符识别。
[0100] 在验证码识别器对验证码生成器生成的预定数目个图片验证码进行识别后,方法 进入步骤S308。在步骤S308中,根据验证码识别器的识别结果,计算验证码识别正确率。 首先获取验证码识别器所识别出的预定数目个验证字符串,然后,将识别出的每个验证字 符串与对应的原始验证字符串(即验证码生成器在生成图片验证码的过程中,随机产生并 保存在内存中的字符串)进行比较,确定该验证字符串是否正确,最后,根据正确的字符串 数目和所述预定数目的比率,得到验证码识别正确率。
[0101] 当验证码识别正确率低于预设门限时,方法进入步骤S310。在步骤S310中,将当 前干扰强度级别设置为验证码生成器的生效干扰强度级别,以供验证码生成器生成具有该 生效干扰强度级别的图片验证码提供给客户端。
[0102] 其中,所述预设门限可以根据本领域技术人员的经验或者根据实验确定,一般可 以将所述预设门限设置为15 %?25%,例如,将其设置为20%。
[0103] 当验证码识别正确率不低于预设门限时,方法进入步骤S312。在步骤S312中,增 加所述预定干扰强度级别,并输入到验证码生成器,并重新执行从步骤S304开始的流程。
[0104] 根据本发明实施例的生成图片验证码的方案,按照干扰强度级别由低到高的顺序 来生成预定数目个图片验证码,采用验证码识别软件对生成的图片验证码进行自动识别, 并计算各干扰强度级别下的验证码识别正确率,当验证码识别正确率低于预设门限时,将 当前干扰强度级别设置为生效干扰强度级别,如此,即能够保证根据该生效干扰强度级别 生成的图片验证码容易被人眼识别,从而提升用户体验,也能够降低图片验证码被验证码 识别软件破解的概率,从而提高网络安全性。
[0105] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。 各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求 的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种 编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发 明的最佳实施方式。
[0106] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施 例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构 和技术,以便不模糊对本说明书的理解。
[0107] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在 上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施 例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保 护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面 的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此, 遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身 都作为本发明的单独实施例。
[0108] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地 改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单 元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或 子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任 何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开 的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴 随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代 特征来代替。
[0109] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例 中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的 范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任 意之一都可以以任意的组合方式来使用。
[0110] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行 的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用 微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的生成图片验证码的装置 中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的 方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样 的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形 式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形 式提供。
[0111] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领 域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中, 不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词"包含"不排除存在 未列在权利要求中的元件或步骤。位于元件之前的单词"一"或"一个"不排除存在多个这 样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来 实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件 项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为 名称。
【权利要求】
1. 一种生成图片验证码的装置,包括: 验证码生成器,适于根据输入的干扰强度级别生成预定数目个具有该干扰强度级别的 图片验证码; 验证码识别器,适于对验证码生成器生成的预定数目个图片验证码进行识别; 识别率计算单元,适于计算验证码识别器对预定数目个图片验证码进行识别的验证码 识别正确率;以及 设置单元,适于输出预定干扰强度级别到验证码生成器,并接收识别率计算单元计算 得到的验证码识别正确率,在识别率计算单元计算得到的验证码识别正确率低于预设门限 时,将当前预定干扰强度级别设置为验证码生成器的生效干扰强度级别,以供验证码生成 器生成具有该生效干扰强度级别的图片验证码提供给客户端。
2. 如权利要求1所述的装置,其中,所述验证码生成器进一步适于: 根据输入的干扰强度级别确定与该干扰强度级别对应的干扰因素; 根据所确定的干扰因素生成图片验证码。
3. 如权利要求2所述的装置,其中,所述干扰因素包括如下的一个或一个以上的组合: 验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最大角度值、字符扭曲 变形的程度和字符间的粘连程度。
4. 如权利要求1所述的装置,其中,所述识别率计算单元进一步适于: 获取验证码识别器所识别出的预定数目个验证字符串; 将识别出的每个验证字符串与对应的原始验证字符串进行比较,确定该验证字符串是 否正确; 根据正确的字符串数目和所述预定数目之间的比率,得到验证码识别正确率。
5. 如权利要求1所述的装置,其中,所述预设门限为15%?25%。
6. -种生成图片验证码的方法,包括: 设置预定干扰强度级别并输入到验证码生成器; 由验证码生成器根据输入的干扰强度级别生成预定数目个具有该干扰强度级别的图 片验证码; 由验证码识别器对验证码生成器生成的预定数目个图片验证码进行识别; 计算验证码识别器对预定数目个图片验证码进行识别的验证码识别正确率;以及 当计算得到的验证码识别正确率低于预设门限时,将当前干扰强度级别设置为验证码 生成器的生效干扰强度级别,以供验证码生成器生成具有该生效干扰强度级别的图片验证 码提供给客户端; 当计算得到的验证码识别正确率不低于上述预设门限时,增加所述预定干扰强度级 另IJ,并输入到验证码生成器。
7. 如权利要求6所述的方法,其中,所述根据输入的干扰强度级别生成预定数目个具 有该干扰强度级别的图片验证码,包括: 根据输入的干扰强度级别确定与该干扰强度级别对应的干扰因素; 根据所确定的干扰因素生成图片验证码。
8. 如权利要求7所述的方法,其中,所述干扰因素包括如下的一个或一个以上的组合: 验证字符数目、噪声点数目、噪声线数目、字符随机角度旋转的最大角度值、字符扭曲 变形的程度和字符间的粘连程度。
9. 如权利要求6所述的方法,其中,所述计算验证码识别器对预定数目个图片验证码 进行识别的验证码识别正确率,包括: 获取验证码识别器所识别出的预定数目个验证字符串; 将识别出的每个验证字符串与对应的原始验证字符串进行比较,确定该验证字符串是 否正确; 根据正确的字符串数目和所述预定数目之间的比率,得到验证码识别正确率。
10. 如权利要求6所述的方法,其中,所述预设门限为15%?25%。
【文档编号】H04L29/06GK104065666SQ201410314504
【公开日】2014年9月24日 申请日期:2014年7月3日 优先权日:2014年7月3日
【发明者】贺冀龙 申请人:北京齐尔布莱特科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1