python 验证码加时间戳的功能是怎么实现的

验证码要成功显示就必须要有一个验证码生成器,所以就要写一个验证码生成器。我在app中新建了一个py文件check_coed.py文件,这就是验证码生成器。代码如下
import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter

_letter_cases = "abcdefghjkmnpqrstuvwxy" # 小写字母,去除可能干扰的i,l,o,z
_upper_cases = _letter_cases.upper() # 大写字母
_numbers = ''.join(map(str, range(3, 10))) # 数字
init_chars = ''.join((_letter_cases, _upper_cases, _numbers))

def create_validate_code(size=(120, 30),
chars=init_chars,
img_type="GIF",
mode="RGB",
bg_color=(255, 255, 255),
fg_color=(0, 0, 255),
font_size=18,
font_type="Monaco.ttf",
length=4,
draw_lines=True,
n_line=(1, 2),
draw_points=True,
point_chance=2):
"""
@todo: 生成验证码图片
@param size: 图片的大小,格式(宽,高),默认为(120, 30)
@param chars: 允许的字符集合,格式字符串
@param img_type: 图片保存的格式,默认为GIF,可选的为GIF,JPEG,TIFF,PNG
@param mode: 图片模式,默认为RGB
@param bg_color: 背景颜色,默认为白色
@param fg_color: 前景色,验证码字符颜色,默认为蓝色#0000FF
@param font_size: 验证码字体大小
@param font_type: 验证码字体,默认为 ae_AlArabiya.ttf
@param length: 验证码字符个数
@param draw_lines: 是否划干扰线
@param n_lines: 干扰线的条数范围,格式元组,默认为(1, 2),只有draw_lines为True时有效
@param draw_points: 是否画干扰点
@param point_chance: 干扰点出现的概率,大小范围[0, 100]
@return: [0]: PIL Image实例
@return: [1]: 验证码图片中的字符串
"""

width, height = size # 宽高
# 创建图形
img = Image.new(mode, size, bg_color)
draw = ImageDraw.Draw(img) # 创建画笔

def get_chars():
"""生成给定长度的字符串,返回列表格式"""
return random.sample(chars, length)

def create_lines():
"""绘制干扰线"""
line_num = random.randint(*n_line) # 干扰线条数

for i in range(line_num):
# 起始点
begin = (random.randint(0, size[0]), random.randint(0, size[1]))
# 结束点
end = (random.randint(0, size[0]), random.randint(0, size[1]))
draw.line([begin, end], fill=(0, 0, 0))

def create_points():
"""绘制干扰点"""
chance = min(100, max(0, int(point_chance))) # 大小限制在[0, 100]

for w in range(width):
for h in range(height):
tmp = random.randint(0, 100)
if tmp > 100 - chance:
draw.point((w, h), fill=(0, 0, 0))

def create_strs():
"""绘制验证码字符"""
c_chars = get_chars()
strs = ' %s ' % ' '.join(c_chars) # 每个字符前后以空格隔开

# font = ImageFont.truetype(font_type, font_size)
font = ImageFont.load_default().font
font_width, font_height = font.getsize(strs)

draw.text(((width - font_width) / 3, (height - font_height) / 3),
strs, font=font, fill=fg_color)

return ''.join(c_chars)

if draw_lines:
create_lines()
if draw_points:
create_points()
strs = create_strs()

# 图形扭曲参数
params = [1 - float(random.randint(1, 2)) / 100,
0, 0, 0, 1 - float(random.randint(1, 10)) / 100, float(random.randint(1, 2)) / 500, 0.001, float(random.randint(1, 2)) / 500 ]
img = img.transform(size, Image.PERSPECTIVE, params) # 创建扭曲
img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强(阈值更大)

⑵ python中怎么随机生成验证码

#!/usr/bin/envpython
importrandom
foriinrange(6):
printrandom.randint(0,9),
##得到随机的6位数字验证码

##第二种,得到随机的6位数字+字符组合的验证码,这里输出格式可版能有点不权对,我就不做修改了。
#!/usr/bin/envpython
importrandom
foriinrange(6):
ifi==random.randint(0,5):
printrandom.randint(0,9)
else:
temp=random.randint(65,90)
printchr(temp)

⑶ python怎么生成随机图形验证码

1.安装pillow模块
pip install pillow
2.pillow模块的基本使用
1.创建图片
from PIL import Image
#定义使用Image类实例化一个长为400px,宽为400px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(400,400),color=(255,255,255))
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")
#显示图片
img1.show()
运行程序,程序会在py文件的同级下生成一个名为"pic.png"的小图片,图片长为400px,宽为400px,颜色为白色.
2.创建画笔
#创建画笔,用于在图片上生成内容
draw1=ImageDraw.Draw(img1,mode="RGB")
3.在图片上生成点
#在(100,100)坐标上生成一个红点,指定的坐标不能超过图片的尺寸
draw1.point([100,100],pill="red")
#在(80,80)坐标上生成一个黑点,指定的坐标不能超过图片的尺寸
draw1.point([80,80],fill=(0,0,0))
4.在图片上画线
#第一个括号里面的参数是坐标,前两个数为开始坐标,后两个数为结束坐标
#括号里的第二个参数指定颜色,可以直接指定,也可以用RGB来表示颜色
draw1.line((100,100,100,300),fill="red")
draw1.line((100,200,200,100),fill="blue")
运行程序,画笔会在(100,100)到(100,300)坐标之间画一条红色的竖线,在(100,200)到(200,100)坐标之间画一根蓝色的斜线
5.在图片在画圆
#括号里的第一个参数是坐标,前两个数为起始坐标,后两个为结束坐标
#用这两个坐标之间的正方形区域生成一个圆,大括号里的第二个参数为圆的开始角度
#第三个参数为圆的结束角度,0到360表示所画的是一个完整的圆形,
#也可以指定的数字来生成一段为圆弧,最后一个参数表示颜色,也可以用RGB来表示想要的颜色
draw1.arc((100,100,300,300),0,360,fill="red")
draw1.arc((0,0,300,300),0,90,fill="blue")
6.在图片在写文本
#使用画笔的text方法在图片上生成文本
#第一个参数为坐标,第二个参数为所有生成的文本的内容
#第三个参数为文本的颜色
draw1.text([0,0],"python","blue")
7.在图片在生成指定字体的文本
#先实例化一个字体对象,第一个参数表示字体的路径,第二个参数表示字体大小
font1=ImageFont.truetype("One Chance.ttf",28)
#在图片上生成字体
#第一个括号里的参数表示坐标,第二个参数表示写入的内容
#第三个参数表示颜色,第四个参数表示使用的字体对象
draw1.text([200,200],"linux","red",font=font1)
图片验证码的实例
#导入random模块
import random
#导入Image,ImageDraw,ImageFont模块
from PIL import Image,ImageDraw,ImageFont
#定义使用Image类实例化一个长为120px,宽为30px,基于RGB的(255,255,255)颜色的图片
img1=Image.new(mode="RGB",size=(120,30),color=(255,255,255))
#实例化一支画笔
draw1=ImageDraw.Draw(img1,mode="RGB")
#定义要使用的字体
font1=ImageFont.truetype("One Chance.ttf",28)
for i in range(5):
#每循环一次,从a到z中随机生成一个字母或数字
#65到90为字母的ASCII码,使用chr把生成的ASCII码转换成字符
#str把生成的数字转换成字符串
char1=random.choice([chr(random.randint(65,90)),str(random.randint(0,9))])
#每循环一次重新生成随机颜色
color1=(random.randint(0,255),random.randint(0,255),random.randint(0,255))
#把生成的字母或数字添加到图片上
#图片长度为120px,要生成5个数字或字母则每添加一个,其位置就要向后移动24px
draw1.text([i*24,0],char1,color1,font=font1)
#把生成的图片保存为"pic.png"格式
with open("pic.png","wb") as f:
img1.save(f,format="png")

⑷ python如何生成网页验证码

我这里找了一个python生成验证码的代码,操作十分方便简单,Python生成随机验证码

⑸ python验证码动态生成怎么处理

最近每天都用python写一个小的脚本,练习使用python语法。
验证码的生成:
这里使用了python的图专像处理库PIL,安属装PIL的过程中出了一个小麻烦,就使用Pillow-win32的一个文件,具体的我也忘了,可以网络下。

⑹ python 生成验证码 怎么加正弦线

python 生成验证码 怎么加正弦线
首先,题主在程序中输入验证码,主要是想尽量模仿真回人的搜索,结果发现所答有cookie是一样的,无需做这一步验证码的输入,如果是这样的话,无需验证码。另外,按题主的代码来看,题主只要比较一下输入验证码之前和之后的cookie,如果没有差别,就去掉验证码处理。如果有差别,说明在验证码的处理中还是做了些事情,就需要验证码。

题外话,题主整个思路想复杂了,对于我们政府的网站,其实没有这么精细的逻辑,比如你上面那个只需要拼接成get请求就可以。

⑺ Python能随即生成中文字符的验证码吗

|

#-*-coding:utf-8-*-
importImage,ImageDraw,ImageFont
importrandom
importmath,string

classRandomChar():
"""用于随机生成汉字"""
@
defUnicode():
val=random.randint(0x4E00,0x9FBF)
returnunichr(val)

@staticmethod
defGB2312():
head=random.randint(0xB0,0xCF)
body=random.randint(0xA,0xF)
tail=random.randint(0,0xF)
val=(head<<8)|(body<<4)|tail
str="%x"%val
returnstr.decode('hex').decode('gb2312')

classImageChar():
def__init__(self,fontColor=(0,0,0),
size=(100,40),
fontPath='wqy.ttc',
bgColor=(255,255,255),
fontSize=20):
self.size=size
self.fontPath=fontPath
self.bgColor=bgColor
self.fontSize=fontSize
self.fontColor=fontColor
self.font=ImageFont.truetype(self.fontPath,self.fontSize)
self.image=Image.new('RGB',size,bgColor)

defrotate(self):
self.image.rotate(random.randint(0,30),expand=0)

defdrawText(self,pos,txt,fill):
draw=ImageDraw.Draw(self.image)
draw.text(pos,txt,font=self.font,fill=fill)
deldraw

defrandRGB(self):
return(random.randint(0,255),
random.randint(0,255),
random.randint(0,255))

defrandPoint(self):
(width,height)=self.size
return(random.randint(0,width),random.randint(0,height))

defrandLine(self,num):
draw=ImageDraw.Draw(self.image)
foriinrange(0,num):
draw.line([self.randPoint(),self.randPoint()],self.randRGB())
deldraw

defrandChinese(self,num):
gap=5
start=0
foriinrange(0,num):
char=RandomChar().GB2312()
x=start+self.fontSize*i+random.randint(0,gap)+gap*i
self.drawText((x,random.randint(-5,5)),RandomChar().GB2312(),self.randRGB())
self.rotate()
self.randLine(18)

defsave(self,path):
self.image.save(path)

⑻ python 模拟登录怎么解决动态生成的验证码

获取不到。验证码的作用就是确保是人在操作而不是自动脚本在登陆。