通过使用python语言,什么是一种生成促销代码的聪明/有效方式。 喜欢用于生成折扣券的特殊号码。 喜欢:1027828-1
由于
答案 0 :(得分:7)
以下不是特别的pythonic或特别有效,但它可能就足够了:
import random
def get_promo_code(num_chars):
code_chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
code = ''
for i in range(0, num_chars):
slice_start = random.randint(0, len(code_chars) - 1)
code += code_chars[slice_start: slice_start + 1]
return code
答案 1 :(得分:5)
1027828-1非常小。攻击者只需使用几行代码就可以进行大约百万次猜测,可能需要几天时间。
这是使用python生成难以预测的数字的好方法,它可以在linux和windows下运行。它是base64'用于二进制安全,取决于你正在做什么你可能想要urllib.urlencode()但我会避免base10因为它不存储尽可能多的信息。
import os
import base64
def secure_rand(len=8):
token=os.urandom(len)
return base64.b64encode(token)
print(secure_rand())
作为旁注,这是生成一个完整的字节,即base256。 256 ^ 8是18446744073709551616,它应该足够大。
答案 2 :(得分:1)
如果你需要一个6位数#,你可以这样做,直到找到一个独特的值:
import random
print str(random.randint(100000, 999999))
或顺序...
答案 3 :(得分:1)
尝试一下:
import random
coupon = open("coupons.txt", "a")
def generate(amount):
for x in range(0, amount):
a = random.randint(1000, 9999)
a = str(a)
b = random.randint(1000, 9999)
b = str(b)
c = random.randint(1000, 9999)
c = str(c)
total = ""
total = str(total)
total = a + " " + b + " " + c
coupon.write(total)
coupon.write("\n")
amount = int(input("How many coupons do you want to generate: "))
generate(amount)
coupon.close()
print("\nCode's have been generated!")
您可以根据需要制作优惠券。他们还保存到名为coupons.txt的txt文件中。
答案 4 :(得分:0)
我已经想出了一个答案,我认为这个答案相当聪明,但依赖于一些可能不符合您情况的假设。
如果这些对您有用,那么这个解决方案也是如此:
def code(seed = None):
if (not seed) or (type(seed) != str) or (len(seed) < 10):
seed = str(uuid.uuid4())[:10]
code = ""
for character in seed:
value = str(ord(character))
code += value
return code[:20]
在此函数中,字符串类型的种子用作代码的基础。对于字符串中的每个字符,将其转换为ASCII表示形式,然后将其附加到代码中。
默认情况下,该函数会生成如下代码:'97534957569756524557'
,并且可以使用任意种子调用。例如......
code("pcperini's answer") == '11299112101114105110'
code(str(time.time())) == '49524956514950505257'