GensoukyoBurstedRouter,中文名称 幻想乡炸裂路由器 ,是用于swzry.com的用户系统zlogin2的验证码生成器。
该验证码生成器利用分词技术获得名词和动词两个词库,通过从词库内随机选择两个名词和一个动词,按照名词+动词+名词的主谓宾结构组合, 形成验证码所需的字符串。这种生成方式所生成的验证码字符串,不再枯燥,很容易随机地产生良多乐趣(←_←),让用户在输入验证码这一 让人烦躁的过程之中,偶尔也能找到一点崎岖的笑点。
关于这个项目崎岖的名称,由来就是,项目在开发过程中,测试字符串生成器的时候,出现的第一个让开发者印象深刻的随机字串。 不得不说,这个生成方式确实是很有趣啊2333333333333333
在使用之前,请先生成一个字典。 生成字典的工具在Tools/DictTool/目录内。 按如下步骤生成字典:
-
您需要准备一篇包含大量中文词汇的文章,比如一篇小说之类的。
-
将这篇文章放入Source.txt,保存为UTF-8编码。
-
在custom.json内设置需要从结果中排除或额外增加的动词和名词,像这样:
(其中nouns是名词,verbs是动词,将要手动添加的词汇放到对应的add里,要从结果中删除的词汇放入对应的del里)
{
"nouns":{
"add":["博丽神社","博丽灵梦","幻想乡","琪露诺"],
"del":["博丽神","博丽灵","琪露"]
},
"verbs":{
"add":[],
"del":["琪露"]
}
}
4.执行DictGenerator.py,会生成两个文件: captcha-dict.json是生成的字典文件,请放到合适的目录,然后在底下的使用说明中将其路径赋予给配置文件。 captcha-dict-human-read.json是上面那个字典文件的副本,它包含缩进,更利于人类阅读,但体积显然会更大。
在部署之前,请先确保您安装了PIL(Python Imaging Library)。
该项目用于Django环境,但也可以轻易地移植用于其它的Web框架。
此处以Django中使用为例。先将captcha.py放入某个Django App,然后在Django的settings.py内加入像这样的配置:
CAPTCHA_CONF = {
"colorList":[
(228,0,255),(255,0,0),(0,255,255),(255,255,0),
(75,189,88),(221,140,45),(45,165,221),(0,255,0),
(255,126,217),(126,255,196),(255,205,126),
(255,126,126),(181,126,255),(126,162,255),(232,255,126)
], #所有可用颜色列表
"fontType":"/Path/To/Fonts/CaptchaFont.ttf", #验证码字体
"tipFontType":"/Path/To/Fonts/TipFont.ttf", #验证码内提示性文字的字体
"size":(300,120), #尺寸,(长,宽)
"img_type":"PNG",
#图片格式(其它格式请参见PIL文档。您的PIL需已编译入相关格式的库,如果没有,请参照网上的教程,安装PIL的png支持)
"mode":"RGB",
#参见PIL文档
"bg_color":(28, 44, 97), #背景颜色
"font_size":24, #字体颜色
"draw_lines":True, #是否绘制干扰线
"line_range":(5,10), #干扰线数量范围
"draw_points":True, #是否绘制干扰点
"point_chance":5, #干扰点强度
}
with open(os.path.join(SWZRY_COMMON_DIR, 'captcha-dict.json')) as fjs:
# captcha-dict.json为字典文件的文件名
jsc=fjs.read()
CAPTCHA_DICT = json.loads(jsc)
之后您就可以在Django中导入该模块并生成验证码了:
from django.http import HttpResponse
import StringIO
from zlogin.captcha import create_validate_with_conf
# 从您的APP中导入该模块
def MakeCaptchaImage_Test(request,randstr):
ioStr = StringIO.StringIO()
img,text = create_validate_with_conf()
img.save(ioStr, "PNG")
ot.seek(0)
# 在这里放置用于存储验证码session的代码,验证码的内容在text变量内
response = HttpResponse(ioStr.read(), mimetype='image/png')
return response
该项目的字典生成器,其分词模块使用了基于MIT License的开源项目jieba分词 该模块Github地址 为了方便大家使用,所以直接把这个本来可以让大家自己pip install安一下的东西直接放进了项目里了。 由于是从Python的dist-packages目录里拷贝出来的,所以LICENSE, README.md, ChangeLog是我后来从GitHub上重新下载了放进去的。
这个文件的内容是我写的连载小说《博丽结界之外 ~ Out of Hakurei Firewall》的部分内容。 提供这个文件只是方便测试演示,您如果需要使用该文件的内容,请遵照该小说的版权说明。 小说项目地址 (您看见本条目时小说可能还尚未发布,却已经先放入该项目中作为Demo使用,在小说发布之前您无权转载。) (这个文件会从半中间随机删掉部分小说内容,然后随机打乱顺序,请不要将其当小说阅读)