美文网首页
python兑换码生成

python兑换码生成

作者: 不懒狮Blaise | 来源:发表于2017-09-12 11:38 被阅读0次

网上参考的一个生成兑换码函数

# encoding=utf8
import random
import string

def _int_to_str(x, base=36):
    """Reversed version of int(s, base=?). src: http://stackoverflow.com/questions/2267362/"""
    numerals = string.digits + string.lowercase + string.uppercase
    numerals.replace('0','')
    numerals.replace('o','')
    if x == 0:
        return numerals[0]
    sign = -1 if x < 0 else 1
    x *= sign
    digits = []
    while x:
        digits.append(numerals[x % base])
        x /= base
    if sign < 0:
        digits.append(u'-')
    return u''.join(reversed(digits))

n_codes = 10  # 生成兑换码个数
rand_len = 6 #这里可以随意传入想要生成的位数
rand_limit = 36 ** rand_len
prefix = 'TX'

for x in xrange(0,n_codes):
    rand = _int_to_str(random.randrange(0, rand_limit), base=36).zfill(6)
    code_text = prefix + rand

    print code_text

这里使用了一个_int_to_str的方法 传入的x则是0-36的n次方中间的任意一个数,然后 base为36. 下面为整个函数的解析

  1. 下面_int_to_str函数 使用了一个 string模块 然后将0-9a-zA-Z包含到了一个叫numerals的变量之中。

  2. 如果x==0 那么返回0

  3. sign等于 如果x<0 sign等于-1 否则等于1 这一句判断传入的x是否为一个负数。并且取出其符号 从这一句可以看到 这个通用函数 其实并不是 前面这个作者自己写的。而是一个通用使用方法。用于解析指定base多少位数使用。 这里后面再讨论。

  4. 如果为负数 转为正数

  5. 申明一个digits = []

  6. digits追加(numerals[传入x % base])

  7. x/=base 这里注意了这里和上面式子呼应 一个取的是余数 处以36取到的余数一定是0-36之间的数,然后可以转换为string,而这里记录每次除以之后剩余的值
    由于取的是36的n次方 这里也正好可以除n次,这样的话 就对应了生成多少个随机数了。

  8. 然后跳出循环之后 判断符号 是否需要追加 负号 也就是 还原负号

  9. 最后再将数组重新拼接成字符串返回

由此结束这样拆开来看 似乎还是比较清晰 合理的。后面再使用了一个 zfill()函数 不满这个数就往前用0补齐。 这样看来 的确也有够随机 而且 base参数实际上是可变化的。这个算法 蛮有意思 所以在这里 记录一下。与大家分享。
原文地址:http://www.cnblogs.com/piperck/p/5047378.html

相关文章

网友评论

      本文标题:python兑换码生成

      本文链接:https://www.haomeiwen.com/subject/mizqsxtx.html