[oeasy]python080如何生成验证码_随机数字密码_真随机

简介: 本文介绍了如何生成随机验证码的过程,从简单的随机数字生成到包含数字、大小写字母及符号的复杂验证码。通过 Python 的 `random` 和 `string` 模块,逐步扩展字符集并确保结果满足特定要求(如包含各类字符)。同时探讨了随机数生成的本质,指出计算机中的“随机”实际上是基于算法和种子值的伪随机,并非真正的物理随机。最后总结了验证码的生成原理及其在实际应用中的意义,为读者揭开日常生活中验证码背后的编程逻辑。

如何生成验证码_随机数字密码_真随机

回忆上次内容

  • 上次主要是 随机数的生成
  • 使用 random包中的 randint(a,b)函数
  • 生成[a,b]范围中的整数
  • 包括 两端 a,b

  • 手机验证码 可以自己生成吗?🤔

提问

  • 但是这样的话
  • 最小值 也得是 100000
  • 第1位 不能是0 了

再问

  • 看起来做了个循环
  • 代码可以理解
import random
# 生成一个6位的随机数字,每位数字可以是0-9
random_number = ""
for _ in range(6):
    random_digit = random.randint(0, 9)
    random_number += str(random_digit)
# 显示生成的随机数字
print(f"生成的6位随机数字是: {random_number}")

结果

  • 运行成功

  • 我想要结果
  • 不止包括数字
  • 还包括大小写字母

  • 可以吗?

提问

import random
import string
# 定义字符集,包括数字、大写字母和小写字母
characters = string.digits + string.ascii_uppercase + string.ascii_lowercase
# 生成一个6位的随机字符串
random_string = ""
for _ in range(6):
    random_char = random.choice(characters)
    random_string += random_char
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 看起来 取值范围 扩大了
  • characters = string.digits + string.ascii_uppercase + string.ascii_lowercase

结果

  • 想要出了数字、大小写字母
  • 还包括符号

再问

import random
import string
# 定义字符集,包括数字、大写字母、小写字母和符号
characters = string.digits + string.ascii_uppercase + string.ascii_lowercase + string.punctuation
# 生成一个6位的随机字符串
random_string = ""
for _ in range(6):
    random_char = random.choice(characters)
    random_string += random_char
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 取值范围 更大了
  • characters = string.digits + string.ascii_uppercase + string.ascii_lowercase + string.punctuation

结果

  • 结果有可能没有某类符号
  • 想要结果必须包含
  • 数字
  • 大写字母
  • 小写字母
  • 符号

  • 在原来的上下文基础上
  • 继续追加提问

提问

import random
import string
# 定义字符集
digits = string.digits  # 数字
uppercase_letters = string.ascii_uppercase  # 大写字母
lowercase_letters = string.ascii_lowercase  # 小写字母
punctuation = string.punctuation  # 符号
# 确保生成的字符串中包含至少一个数字、一个大写字母、一个小写字母和一个符号
random_string = [
    random.choice(digits),
    random.choice(uppercase_letters),
    random.choice(lowercase_letters),
    random.choice(punctuation)
]
# 从所有字符集中选择剩余的两个字符
all_characters = digits + uppercase_letters + lowercase_letters + punctuation
for _ in range(2):
    random_string.append(random.choice(all_characters))
# 打乱顺序以确保随机性
random.shuffle(random_string)
# 将列表转换为字符串
random_string = ''.join(random_string)
# 显示生成的随机字符串
print(f"生成的6位随机字符串是: {random_string}")
  • 四类字符 各来一个
  • 剩下两个 随机得到
  • 然后让顺序 随机
  • 可以让 随机结果 固定下来 吗?

事无绝对

  • 如果上限和下限 被钳位(clamp)

  • 那么随机数
  • 也就 被 钳成
  • 固定数值 了

  • 如果下限高于上限呢?

胡乱尝试

  • 程序报错

  • ValueError
  • 空的范围
  • 对于randrange函数
  • 去找找
  • 这个 报错信息

搜索

  • 在/usr/lib/python3.8/random.py
  • 反向搜索
  • /empty range for randrange

  • 真的找到了抛出异常的位置

位置

  • 按n查找下一个匹配
  • 可以找到具体报错的位置 226 行

  • 天哪 😱
  • 随机也是有章可循的
  • 随机数 也是 算法计算得到的结果

  • 也就是说
  • 随机 也是 可控 的?! 😱

幸运大转盘

  • 物理世界 中的随机
  • 认为是真随机
  • 上帝扔骰子
  • 存在薛定谔的猫

  • 但可能 在概率上 动心思
  • 盲盒
  • 大乐透

对比

  • 虚拟世界的随机
  • ssr
  • 抽卡

  • 除了算法本身的 控制之外
  • 随机函数 本身 也是可以 被控制的
  • 不存在 真随机
  • ai怎么看呢?

计算机中的随机

总结

  • 这次输出了
  • 随机数字 密码

  • 这下知道
  • 平时收到的验证码
  • 怎么来的了

  • 计算机中 没有所谓的 真·随机
  • 一般都是 依靠时间为变量 得到的 随机
相关文章
|
6天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
18014 12
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
17天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
29547 141
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
7天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4615 20
|
6天前
|
人工智能 API 开发者
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案
阿里云百炼Coding Plan Lite已停售,Pro版每日9:30限量抢购难度大。本文解析原因,并提供两大方案:①掌握技巧抢购Pro版;②直接使用百炼平台按量付费——新用户赠100万Tokens,支持Qwen3.5-Max等满血模型,灵活低成本。
1462 3
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案