一、验证码背景
公司又不想花钱购买第三方的,此时需要我们自行生成啦经常出没的地方
- 登录
- 访问固定网页时
- 访问频率过快,反爬
二、数字+字母大小写验证码
- 通常保存到redis中是不区分大小写的,区分的话一旦输错,重新生成验证嘛,需要重新输入,用户体验差,感觉不爽。我也不爽
import random
def captcha():
ret = ""
for i in range(6):
num = chr(random.randint(48,57))#ASCII表示数字
letter = chr(random.randint(97, 122))#取小写字母
Letter = chr(random.randint(65, 90))#取大写字母
s = str(random.choice([num, letter, Letter]))
ret += s
return ret
print(captcha())
三、10以内加减乘验证码
- 为什么10以内?小学生就能算出来,复杂的不好算 比如
17*18=
。 - 为什么没有除法?因为有余数
def math_challenge():
operators = ('+', '*', '-',)
operands = (random.randint(1, 10), random.randint(1, 10))
operator = random.choice(operators)
if operands[0] < operands[1] and '-' == operator:
operands = (operands[1], operands[0])
challenge = '%d%s%d' % (operands[0], operator, operands[1])
return '{}={}'.format(challenge, eval(challenge))
print(math_challenge())
三、纯字母
def random_char_challenge():
chars, ret = 'abcdefghijklmnopqrstuvwxyz', ''
for i in range(6):
ret += random.choice(chars)
return ret.upper(), ret
print(random_char_challenge())