写点什么

Python 应用之验证码验证

作者:向阳逐梦
  • 2022 年 10 月 07 日
    四川
  • 本文字数:1552 字

    阅读完需:约 5 分钟

1. 问题的描述

用户登录网站经常需要输入验证码,验证码包含大小写字母和数字,随机出现。用户输入验证码时不区分大小写,只要各字符出现顺序正确即可通过验证。   请写一个程序完成验证码的匹配验证,随机生成四位数的验证码如 Qs2X(生成数字概率为 1/5,大写字母和小写字母概率各为 2/5) 如果用户输入验证码正确,输出“验证码正确”,输入错误时输出“验证码错误,请重新输入”,再重新生成验证码让用户输入,输入五次错误时输出“您已用光了验证机会”。

网站上的验证码的作用是保护网站安全,一般网站都要通过验证码来防止机器大规模注册,机器暴力破解数据密码等危害。手机的短信和语音验证码是要确定这个手机是用户自己的。其实最后都是为了验证,这个操作是个人在做而不是机器,证明我是我的过程。

2. 解题的思路


  • 第一步: 由于有生成概率,所以需要使用 random 模块

  • 第二步: 五次输入机会,需要使用 for 循环

3. 解题的方法

'''用户登录网站经常需要输入验证码,验证码包含大小写字母和数字,随机出现。用户输入验证码时不区分大小写,只要各字符出现顺序正确即可通过验证。   请写一个程序完成验证码的匹配验证,随机生成四位数的验证码如Qs2X(生成数字概率为1/5,大写字母和小写字母概率各为2/5) 如果用户输入验证码正确,输出“验证码正确”,输入错误时输出“验证码错误,请重新输入”,再重新生成验证码让用户输入,输入五次错误时输出“您已用光了验证机会”。'''import randomn = 0def verify2():    a = []    for _ in range(4):        x = random.random()        if x <= 0.4:            a.append(random.choice(                ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'L', 'K', 'J', 'H', 'G', 'F', 'D', 'S', 'A', 'Z',                 'X', 'C', 'V', 'B', 'N', 'M']))        elif x <= 0.8:            a.append(random.choice(                ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'l', 'k', 'j', 'h', 'g', 'f', 'd', 's', 'a', 'z',                 'x', 'c', 'v', 'b', 'n', 'm']))        else:            a.append(random.choice(['1', '2', '3', '4', '5', '6', '7', '8', '9', '0']))    return str(''.join(a))def code():    global n    a = verify2()    verify = input(f'请输入验证码{a}:')    if verify.lower() == a.lower():        print('验证码正确')    else:        n += 1        if n == 5:            print('您已用光了验证机会')        else:            print('验证码错误,请重新输入')            code()code()
复制代码

第 1 行: 引入 random 随机模块

第 2 行: 定义变量 n=0,用于计算输入错误的次数

第 3 行: 创建函数 verify2,用于随机生成验证码

第 4 行: 创建列表 a,用于存放验证码的字符

第 5 行: for 循环,用来循环五次

第 6 行: 定义变量 x 并为之赋值 0~1 的随机小数

第 7-10 行: 当 x<=0.4 时,即出现概率为 4/10 即 0.4,随机选择大写字母中的一个

第 11-14 行: 当 0.4<x<=0.8 时,即出现概率为 4/10 即 0.4,随机选择小写字母中的一个

第 15-16 行: 其他情况下即 x>0.8 时,即出现概率为 2/10 即 0.2,随机选择一个数字

第 17 行: 将字符连在一起并返回给函数值

第 18 行: 创建函数 code

第 20 行: 定义变量 a 并用 verify2 函数为之随机赋值一个验证码

第 21 行: 使用 input 函数提示用户输入验证码并赋值给 verify

第 22-23 行: 判断输入的验证码小写是否与随机出现的验证码小写状态一样,若是一样,则打印验证码正确

第 24-25 行: 若是不一样,给全局变量 n 加一

第 26-27 行: 当 n 等于 5 的时候,代表以及输错了五次,打印您已用光了验证机会

第 28-30 行: 若还未输入五次错误,让用户重新输入验证码,并重新开始判断

第 31 行: 使用 code 函数开始运行代码

代码运行结果为:



发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之验证码验证_验证码_向阳逐梦_InfoQ写作社区