通过使用 python 语言,这将是一种聪明/有效的生成促销代码的方法。喜欢用于生成折扣优惠券的特殊号码。喜欢:1027828-1

谢谢

有帮助吗?

解决方案

1027828-1极小。攻击者可以利用做出的代码只有几行,也许几天〜亿猜测。

这是一个很好的方法,以产生硬使用Python预测数,它的工作原理下Linux和Windows。据base64'ed二进制安全性,这取决于你可能希望你用它做什么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这应该是足够大的。

由于有人指出,Base64是不适合人类使用一个很好的令牌。考虑一个替代编码像URL安全base64或也许 humanhash 因为他们将更容易输入英寸

其他提示

以下,没有特别Python的或特别有效,但也可能是足够的:

 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

如果你需要一个6位数的#你可以这样做,直到你找到了一个独特的价值:

import random
print str(random.randint(100000, 999999))

或去依次...

我对此提出了一个我认为相当聪明的答案,但依赖于一些可能不适合您的情况的假设。

  • 生成的代码是纯数字的。
  • 从技术上来说,生成的代码是可变长度的;[10, 20]。

如果这些对您有用,那么这个解决方案也可能对您有用:

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'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top