util_random.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. class Produce:
  2. # 定义一个空列表,是随机数来源的容器
  3. __rand_num = list()
  4. # 定义一个空集合,用于存储已经产生的验证码,(也可以用空列表)
  5. __abandon = set()
  6. # 验证码容器
  7. @classmethod
  8. def __vessel(cls, option='num or letter'):
  9. # 清空列表,(随机数来源的容器)
  10. cls.__rand_num = list()
  11. if option == 'num':
  12. # 把数字存入列表
  13. for i in range(10):
  14. cls.__rand_num.append(str(i))
  15. elif option == 'letter':
  16. # 把大小写字母存入列表
  17. for i in range(26):
  18. cls.__rand_num.append(chr(i + 65)) # 大写字母
  19. cls.__rand_num.append(chr(i + 97)) # 小写字母
  20. elif option == 'num or letter':
  21. # 把数字存入列表
  22. for i in range(10):
  23. cls.__rand_num.append(str(i))
  24. # 把大小写字母存入列表
  25. for i in range(26):
  26. cls.__rand_num.append(chr(i + 65)) # 大写字母
  27. cls.__rand_num.append(chr(i + 97)) # 小写字母
  28. else:
  29. print('参数option传递错误!!!')
  30. print("option='num' or 'letter'")
  31. import sys
  32. sys.exit()
  33. # 随机生成6位验证码
  34. @classmethod
  35. def auth_code(cls, option='num or letter', num=6):
  36. buf = '' # 定义一个空的字符串,用于存储6位验证码
  37. cls.__vessel(option=option) # 验证码容器
  38. from random import choice # 导入随机模块
  39. for i in range(num):
  40. buf += choice(cls.__rand_num) # 随机数拼接成6位验证码
  41. # 如果废弃站集合为空
  42. if cls.__abandon == set():
  43. cls.__abandon.add(buf) # 把验证码存入废弃站集合,说明此验证码不能再使用
  44. return buf
  45. # 保证6位验证码不重复
  46. for i in cls.__abandon:
  47. # 如果验证码重复
  48. if buf == i:
  49. buf = cls.auth_code(option=option, num=num)
  50. return buf
  51. # 验证码不重复
  52. cls.__abandon.add(buf) # 把验证码存入废弃站集合,说明此验证码不能再使用
  53. return buf
  54. # 查看数据
  55. @classmethod
  56. def check_data(cls):
  57. print(f'随机数库:{cls.__rand_num}')
  58. print('废弃站:{}'.format(cls.__abandon))
  59. # 清空废弃站
  60. @classmethod
  61. def clear_abandon(cls):
  62. cls.__abandon.clear()
  63. # 程序测试
  64. if __name__ == '__main__':
  65. for i in range(100):
  66. num = Produce.auth_code(option='num')
  67. print(Produce.auth_code(option='num'))