CN104637077B - 基于字符绘制的图片验证码生成方法 - Google Patents
基于字符绘制的图片验证码生成方法 Download PDFInfo
- Publication number
- CN104637077B CN104637077B CN201510075888.XA CN201510075888A CN104637077B CN 104637077 B CN104637077 B CN 104637077B CN 201510075888 A CN201510075888 A CN 201510075888A CN 104637077 B CN104637077 B CN 104637077B
- Authority
- CN
- China
- Prior art keywords
- character
- identifying code
- code
- coordinate
- background color
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 24
- 238000012795 verification Methods 0.000 title claims abstract description 18
- 238000011017 operating method Methods 0.000 claims description 2
- 230000009286 beneficial effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000007812 deficiency Effects 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
Landscapes
- Character Discrimination (AREA)
- Character Input (AREA)
Abstract
本发明涉及一种基于字符绘制的图片验证码生成方法,包括:定义字符库;生成验证码的底色图,并在底色图上建立坐标;从字符库中随机选取4‑6个字符作为验证码字符;逐个生成验证码字符尺寸和位置以及绘制验证码字符和噪声;添加全局噪声等步骤。本发明生成的验证码可增加机器识别的难度,同时保证人眼的正常识别,提高验证码的安全性能及良好的用户体验。
Description
技术领域
发明涉及一种基于字符绘制的图片验证码生成方法。
背景技术
现有图片验证码生成方法广泛使用的手段有:使用随机字体、字符变形、字符旋转、字符粘连、添加噪声等。关键问题在于,现存方法的验证码字符无论是汉字、英文、数字,或是立体字符,都是使用某一种现存已知的字体,字符在图像中的轮廓特征与干扰噪声具有较明显的区别。另外,许多现存图片验证码所采取的干扰手段并没有起到实质性作用,不了解图像处理和识别的基本原理,一味地添加噪声和变形并不一定能够增加机器识别的难度,反而可能会造成人眼识别困难。
发明内容
本发明为了克服现有技术的不足,提供一种安全性高的基于字符绘制的图片验证码生成方法。
为了实现上述目的,发明采用以下技术方案:
一种基于字符绘制的图片验证码生成方法,其操作步骤如下:
(1)定义字符库,定义字符的笔画及笔画绘制坐标;其中,字符库包括有限个能够从计算机录入的字符;每一字符均为双线条空心字符;字符笔划为将各字符分解成便于坐标表示的直线段或曲线段;
(2)生成验证码的底色图,并在底色图上建立坐标;
(3)从字符库中随机选取4-6个字符作为验证码字符;
(4)生成首个验证码字符在验证码图像中绘制的尺寸和位置;
(5)根据字符笔划定义以及要绘制的位置和大小绘制首个验证码字符;
(6)将首个验证码字符进行变形操作;
(7)从字符库中随机选取字符笔画线条作为字符噪声,绘制首个验证码字符的字符噪声,其坐标在首个验证码位置区域内的空白区域内随机取值;
(8)重复上述步骤(4)-(7)依次生成其余验证码字符及其相应字符噪声;
(9)添加全局噪声,全局噪声的坐标在底色图区域内随机取值。
本发明通过自定义验证码字符笔画、使用双线空心字符作为验证码字符、使用字符笔画线条并采用相同的绘制方法作为噪声,提高了机器的识别难度,同时,保证了人眼的正常识别,提升了友好的用户体验。
作为优选,所述步骤(4)具体包括如下步骤:
4.1生成字符尺寸:生成一个在20至验证码底色图高度之间的数字作为字符尺寸;4.2 生成字符位置:即纵向起始坐标和横向起始坐标,纵向起始坐标取值在零与底色图高度减字符高度的差值之间,使字符不会超出底色图区域;首个验证码字符的横向起始坐标在零与底色图高度减去字符高度的差值之间;中间字符的横向起始坐标在上一个字符的横向结束坐标的基础上加字符间距;最后一个字符的横向起始坐标同中间字符的横向起始坐标,当该坐标加字符宽度大于验证码底色图宽度时,将其值修改为减去超出验证码宽度值后的值;验证码字符间距取值验证码字符尺寸的-0.5至1倍之间。
太小的验证码字符尺寸会使双线条发生重叠现象,线条重叠后字符的轮廓线***将有可能利于机器识别;更小的验证码字符尺寸会使字符笔划过度重叠交织在一起而无法辨识;过大的验证码字符尺寸将使验证码字符超出底色图区域,造成验证码字符部分缺失而不利于辨识;小于0倍的间距,将会使验证码字符与上一个验证码字符形成一定重叠;大于1倍的间距将在两个验证码字符间留出一个空白空间。作为优选,首个验证码字符的横向起始坐标是大于零、小于验证码底图高度减去字符高度的数值;中间验证码字符的横向起始坐标是大于上一个验证码字符的横向起始坐标加上一个验证码字符的宽度加字符间距的数值;最后一个验证码字符的横向起始坐标是大于上一个验证码字符的横向起始坐标加上一个字符的宽度加字符间距的数值,并且当最后一个字符的横向起始坐标加其宽度大于验证码底图宽度时,将其位置向左移动到不会超出验证码底图的位置;验证码字符的纵向位置是大于零、小于验证码底图高度减去字符高度的数值;验证码字符间距为验证码字符宽度的-0.5倍至1倍之间。
字符间距取值上一个字符尺寸的-0.5至1倍左右,小于0倍的间距,将会使字符与上一个字符形成一定重叠,可增加机器识别难度;0-1倍的间距将在两个字符间留出一个空白空间,使机器识别时无法准确确定字符位置,增加了机器识别的难度。作为优选,所述步骤(6)中的变形操作包括变形和旋转;其中,变形为在任意方向上选择一个或若干个方向将验证码字符进行拉伸操作,拉伸度在验证码字符尺寸的四分之一以内,旋转的范围在顺时针或逆时针旋转30度以内。
在不影响人眼识别的基础上,增加机器识别难度。
作为优选,所述底色图为纯色。利于人眼识别而增加机器识别难度。
作为优选,所述字符笔划的线条宽度为1像素,字符笔划颜色为不同于底色图颜色的纯色。利于人眼识别而增加机器识别难度。
作为优选,所述全局噪声的数量为12-20个,每个验证码字符处的字符噪声为6-10个。在不影响人眼识别的基础上,增加机器识别难度。
作为优选,所述字符库包括26个英文大写字母和10个***数字。该些字符结构简单,便于人眼识别。
综上所述,本发明通过自定义验证码字符笔画、使用双线空心字符作为验证码字符、使用字符笔画线条并采用相同的绘制方法作为噪声,提高了机器的识别难度,同时,保证了人眼的正常识别,提升了友好的用户体验。
附图说明
图1为本发明中字符在正方形格子坐标内显示的示意图一;
图2为本发明中字符在正方形格子坐标内显示的示意图二;
图3a-3f为本发明验证码生成过程的示意图。
具体实施方式
为了使本技术领域的人员更好的理解发明方案,下面将结合发明实施例中的附图,对发明实施例中的技术方案进行清楚、完整的描述。
如图1-2所示,本发明的基于字符绘制的图片验证码生成方法,包括如下步骤:
(1)定义字符库,定义字符的笔画及笔画绘制坐标;其中,字符库包括有限个能够从计算机录入的字符,例如26个大写英文字母和10个***数字;每一字符均为双线条空心字符;字符笔划为将各字符分解成便于坐标表示的直线段或曲线段;
本步骤中,为了能够绘制不同大小尺寸的验证码字符,可以设定验证码字符在一个边长为1的正方形格子内,将正方形横竖各分成10份,每个小格单元为0.1,将字符笔划中的直线段的顶点坐标用这个10x10的坐标表示出来,曲线段的弧线顶点也用这个10x10的坐标表示出来,并标识曲线半径。根据这些坐标参数,就可以用画线或画弧的方法绘制出字符笔划,进而绘制出整个字符。以1为单位的坐标表示方法,在需要绘制不同大小尺寸的字符时,就可以用已经设定坐标乘以字符尺寸后再进行绘制,将会得到相应尺寸大小的字符。例如尺寸50的字符,绘制时就将其线条坐标都乘以50。本步骤中,为了能够绘制出双线条空心字符,定义字符笔划时,根据双线条空心字符的笔划线条定义相关线段的坐标。图1为本实施例绘制的双线条空心字符A的示例图,其笔划线段的顶点坐标沿逆时针和从外向内方向依次为:(0.5,0), (0,1), (0.1,1), (0.2,0.8), (0.8,0.8), (0.9,1), (1,1), (0.5,0.2), (0.25,0.7), (0.75,0.7);坐标值使用计算机图形坐标表示法,左上角为原点。同理,如图2所示为本实施例绘制的双线条空心字符C的示例图。(2)生成验证码的底色图,并在底色图上建立坐标;底色图的高度可以视应用场合而设定,一般情况下在50个像素左右较为合适,宽度设定为高度乘以验证码字符个数;将底图填充为纯色,例如白色。如附图3a。(3)从字符库中随机选取4-6个字符作为验证码字符;
(4)生成首个验证码字符在验证码图片中绘制的尺寸和位置,具体步骤如下:
4.1,生成字符尺寸。生成一个在20像素至验证码底图高度之间的数字作为验证码字符的尺寸。太小的字符尺寸会使双线条发生重叠现象,线条重叠后字符的轮廓线***将有可能利于机器识别;更小的字符尺寸会使字符笔划过度重叠交织在一起而无法辨识。过大的字符尺寸将使字符超出验证码底图区域,造成字符部分缺失而不利于辨识。4.2,生成字符位置。即纵向起始坐标和横向起始坐标。纵向起始坐标取值在零与底图高度减字符高度的差值之间,使字符不会超出底图区域。第一个字符的横向起始坐标在零与底图高度减去字符高度的差值之间;中间字符的横向起始坐标在上一个字符的横向结束坐标的基础上加字符间距;最后一个字符的横向起始坐标同中间字符的横向起始坐标,但当该坐标加字符宽度大于验证码底图宽度时,将其值修改为减去超出验证码宽度值后的值。其中,字符间距取值字符尺寸的-0.5至1倍左右,小于0倍的间距,将会使字符与上一个字符形成一定重叠;大于倍的间距将在两个字符间留出一个空白空间。在较好的实施实例中,第一个字符的横向位置是大于零、小于验证码底图高度减去字符高度的数值;中间字符的横向位置是大于上一个字符的横向位置加上一个字符的宽度加字符间距的数值;最后一个字符的横向位置是大于上一个字符的横向位置加上一个字符的宽度加字符间距的数值,并且当最后一个字符的横向位置加其宽度大于验证码底图宽度时,将其位置向左移动到不会超出验证码底图的位置;字符的纵向位置是大于零、小于验证码底图高度减去字符高度的数值。其中,字符间距取值上一个字符尺寸的-0.5至1倍左右,小于0倍的间距,将会使字符与上一个字符形成一定重叠,可增加机器识别难度;0-1倍的间距将在两个字符间留出一个空白空间,使机器识别时无法准确确定字符位置,增加了机器识别的难度。
(5)根据字符笔划定义以及要绘制的位置和大小绘制首个验证码字符;在底图上当前字符的坐标位置上绘制当前字符。其中,字符笔划根据字符库中笔划的坐标定义来绘制。字符笔划的线条宽度使用1个像素,线条颜色使用纯色,例如黑色。(6)将首个验证码字符进行变形操作;对绘制好的字符所在图像区域进行变形和旋转处理。在360度的方向上选择一个或若干个方向将字符图像区域进行拉伸,拉伸度控制在不大于1/4左右字符尺寸的程度。进一步地,对字符图像区域沿顺时针或逆时针旋转0-30度。
(7)从字符库中随机选取字符笔画线条作为字符噪声,绘制首个验证码字符的字符噪声,其坐标在首个验证码位置区域内的空白区域内随机取值;在当前字符的图像区域,包括字符周围留出的空白区域范围内添加噪声。为使噪声与字符线条更为相似从而加大机器识别难度,使用字符库中定义的字符笔划作为噪声线条。因此绘制噪声线条与绘制字符一样存在尺寸问题,可以选用与字符尺寸相近的尺寸。绘制噪声线条的位置,则在当前字符图像区域内选取一个横纵坐标值。作为优选,单个字符范围内的噪声线条绘制数目在10个左右,能够较好地起到干扰机器识别字符线条的作用,又不至于过多而混淆了字符形态。作为优选,为增加机器识别难度,绘制噪声线条采用与绘制字符时相同的线条宽度和相同的颜色。(8)重复上述步骤(4)-(7)依次生成其余验证码字符及其相应字符噪声;
(9)添加全局噪声,全局噪声的坐标在底色图区域内随机取值;所述全局噪声的数量为12-20个,在本实施例中为15个。
验证码图片的生成过程如图3a-3f所示。
显然,所描述的实施例仅仅是发明的一部分实施例,而不是全部的实施例。基于发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于发明保护的范围。
Claims (9)
1.一种基于字符绘制的图片验证码生成方法,其操作步骤如下:
(1)定义字符库,定义字符的笔画及笔画绘制坐标;其中,字符库包括有限个能够从计算机录入的字符;每一字符均为双线条空心字符;字符笔划为将各字符分解成便于坐标表示的直线段或曲线段;
(2)生成验证码的底色图,并在底色图上建立坐标;
(3)从字符库中随机选取4-6个字符作为验证码字符;
(4)生成首个验证码字符在验证码图像中绘制的尺寸和位置;
(5)根据字符笔划定义以及要绘制的位置和大小绘制首个验证码字符;
(6)将首个验证码字符进行变形操作;
(7)从字符库中随机选取字符笔画线条作为字符噪声,绘制首个验证码字符的字符噪声,其坐标在首个验证码位置区域内的空白区域内随机取值;
(8)重复上述步骤(4)-(7)依次生成其余验证码字符及其相应字符噪声;
(9)添加全局噪声,全局噪声的坐标在底色图区域内随机取值。
2.根据权利要求1所述的图片验证码生成方法,其特征在于:所述步骤(4)具体包括如下步骤:
4.1生成字符尺寸:生成一个在20至验证码底色图高度之间的数字作为字符尺寸;4.2生成字符位置:即纵向起始坐标和横向起始坐标,纵向起始坐标取值在零与底色图高度减字符高度的差值之间,使字符不会超出底色图区域;首个验证码字符的横向起始坐标在零与底色图高度减去字符高度的差值之间;中间字符的横向起始坐标在上一个字符的横向结束坐标的基础上加字符间距;最后一个字符的横向起始坐标同中间字符的横向起始坐标,当该坐标加字符宽度大于验证码底色图宽度时,将其值修改为减去超出验证码宽度值后的值;验证码字符间距取值验证码字符尺寸的-0.5至1倍之间。
3.根据权利要求2所述的图片验证码生成方法,其特征在于:首个验证码字符的横向起始坐标是大于零、小于验证码底图高度减去字符高度的数值;中间验证码字符的横向起始坐标是大于上一个验证码字符的横向起始坐标加上一个验证码字符的宽度加字符间距的数值;最后一个验证码字符的横向起始坐标是大于上一个验证码字符的横向起始坐标加上一个字符的宽度加字符间距的数值,并且当最后一个字符的横向起始坐标加其宽度大于验证码底图宽度时,将其位置向左移动到不会超出验证码底图的位置;验证码字符的纵向位置是大于零、小于验证码底图高度减去字符高度的数值;验证码字符间距为验证码字符宽度的-0.5倍至1倍之间。
4.根据权利要求1所述的图片验证码生成方法,其特征在于:所述步骤(6)中的变形操作包括变形和旋转;其中,变形为在任意方向上选择一个或若干个方向将验证码字符进行拉伸操作,拉伸度在验证码字符尺寸的四分之一以内,旋转的范围在顺时针或逆时针旋转30度以内。
5.根据权利要求1所述的图片验证码生成方法,其特征在于:所述底色图为纯色。
6.根据权利要求1所述的图片验证码生成方法,其特征在于:所述字符笔划的线条宽度为1像素,字符笔划颜色为纯色。
7.根据权利要求1所述的图片验证码生成方法,其特征在于:所述全局噪声的数量为12-20个,每个验证码字符处的字符噪声为6-10个。
8.根据权利要求1所述的图片验证码生成方法,其特征在于:所述各验证码字符的高度为大于20像素、小于底色图高度。
9.根据权利要求1所述的图片验证码生成方法,其特征在于:所述字符库包括26个英文大写字母和10个***数字。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510075888.XA CN104637077B (zh) | 2015-02-13 | 2015-02-13 | 基于字符绘制的图片验证码生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510075888.XA CN104637077B (zh) | 2015-02-13 | 2015-02-13 | 基于字符绘制的图片验证码生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104637077A CN104637077A (zh) | 2015-05-20 |
CN104637077B true CN104637077B (zh) | 2017-10-17 |
Family
ID=53215783
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510075888.XA Expired - Fee Related CN104637077B (zh) | 2015-02-13 | 2015-02-13 | 基于字符绘制的图片验证码生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104637077B (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106327547B (zh) * | 2015-06-23 | 2019-09-27 | 阿里巴巴集团控股有限公司 | 一种验证码生成验证的方法和装置 |
CN105787340B (zh) * | 2016-03-18 | 2018-09-18 | 厦门大学嘉庚学院 | 基于文本粘连与视觉补偿的图片验证码实现方法 |
CN106204559B (zh) * | 2016-06-30 | 2019-03-12 | 北京奇艺世纪科技有限公司 | 图像处理方法和装置 |
CN106411881B (zh) * | 2016-09-27 | 2020-12-25 | 北京奇虎科技有限公司 | 基于客户端进行购票的方法及装置 |
CN108537225A (zh) * | 2017-03-01 | 2018-09-14 | 重庆邮电大学 | 一种用于自动识别验证码中空心字符的方法 |
CN108647683B (zh) * | 2018-04-28 | 2021-08-17 | 浙江大学 | 一种基于频域加噪的字符对抗验证码生成方法和*** |
CN111177688B (zh) * | 2019-12-26 | 2022-10-14 | 微梦创科网络科技(中国)有限公司 | 一种基于形似语言混合字体的安全认证方法及装置 |
CN111859354B (zh) * | 2020-07-21 | 2023-09-01 | 百度在线网络技术(北京)有限公司 | 图片验证方法、装置、电子设备、存储介质和程序产品 |
CN112446368A (zh) * | 2020-10-20 | 2021-03-05 | 中电金信软件有限公司 | 票据图像处理、模型训练方法、装置和计算机设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101237324A (zh) * | 2007-01-31 | 2008-08-06 | ***通信集团公司 | 图片验证码的生成方法及生成装置 |
CN101923702A (zh) * | 2010-08-25 | 2010-12-22 | 郝红卫 | 一种图片验证码的生成方法 |
CN102768754A (zh) * | 2012-08-03 | 2012-11-07 | 网易(杭州)网络有限公司 | 一种图片验证码的实现方法和装置 |
CN104065666A (zh) * | 2014-07-03 | 2014-09-24 | 北京齐尔布莱特科技有限公司 | 一种生成图片验证码的方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104104652B (zh) * | 2013-04-03 | 2017-08-18 | 阿里巴巴集团控股有限公司 | 一种人机识别方法、网络服务接入方法及相应的设备 |
-
2015
- 2015-02-13 CN CN201510075888.XA patent/CN104637077B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101237324A (zh) * | 2007-01-31 | 2008-08-06 | ***通信集团公司 | 图片验证码的生成方法及生成装置 |
CN101923702A (zh) * | 2010-08-25 | 2010-12-22 | 郝红卫 | 一种图片验证码的生成方法 |
CN102768754A (zh) * | 2012-08-03 | 2012-11-07 | 网易(杭州)网络有限公司 | 一种图片验证码的实现方法和装置 |
CN104065666A (zh) * | 2014-07-03 | 2014-09-24 | 北京齐尔布莱特科技有限公司 | 一种生成图片验证码的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104637077A (zh) | 2015-05-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104637077B (zh) | 基于字符绘制的图片验证码生成方法 | |
CN102724191B (zh) | 一种图文结合的Web验证码安全防护方法及装置 | |
US9829309B2 (en) | Depth sensing method, device and system based on symbols array plane structured light | |
CN104966115B (zh) | 一种用图像填充二维码的方法 | |
CN110503146B (zh) | 数据增强方法、装置、计算设备及计算机存储介质 | |
CN104952083B (zh) | 一种基于显著性目标背景建模的视频显著性检测方法 | |
CN104463925B (zh) | 基于斑点模板自动组合的数码迷彩设计方法 | |
CN108176049B (zh) | 一种信息提示方法、装置、终端和计算机可读存储介质 | |
CN103731403B (zh) | 一种验证码生成***及方法 | |
CN113657397B (zh) | 循环生成网络模型的训练方法、建立字库的方法和装置 | |
CN107103225A (zh) | 一种生成图形验证码的方法 | |
CN108986193A (zh) | 一种三维文字描边绘制方法 | |
CN105117723B (zh) | 一种图像识别方法及装置 | |
JP6298422B2 (ja) | マンマシンインターフェースのグラフィック表示用の文字列の処理技術 | |
CN111046915B (zh) | 一种风格字符生成的方法 | |
CN110532864B (zh) | 软笔书法临摹相似性评价方法 | |
CN108171229A (zh) | 一种空心粘连验证码的识别方法及*** | |
JPH01181173A (ja) | ベクトルフォント輪郭描画方式 | |
CN112765935B (zh) | 一种文字外形个性化处理方法及*** | |
KR940006918B1 (ko) | 디지탈 활자체의 문자윤곽을 채우는 방법 및 시스템 | |
CN106327449B (zh) | 一种图像修复方法、装置和计算设备 | |
CN111814508B (zh) | 一种文字识别方法、***及设备 | |
US20150379750A1 (en) | Image processing device, image processing method, information storage medium, and program | |
JPH09325750A (ja) | 画像処理装置および方法 | |
US20120178059A1 (en) | Method for creating combined characters in a chinese character learning game |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171017 Termination date: 20200213 |