python兌換碼生成

網(wǎng)上參考的一個生成兌換碼函數(shù)

# 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  # 生成兌換碼個數(shù)
rand_len = 6 #這里可以隨意傳入想要生成的位數(shù)
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次方中間的任意一個數(shù),然后 base為36. 下面為整個函數(shù)的解析

  1. 下面_int_to_str函數(shù) 使用了一個 string模塊 然后將0-9a-zA-Z包含到了一個叫numerals的變量之中。

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

  3. sign等于 如果x<0 sign等于-1 否則等于1 這一句判斷傳入的x是否為一個負數(shù)。并且取出其符號 從這一句可以看到 這個通用函數(shù) 其實并不是 前面這個作者自己寫的。而是一個通用使用方法。用于解析指定base多少位數(shù)使用。 這里后面再討論。

  4. 如果為負數(shù) 轉(zhuǎn)為正數(shù)

  5. 申明一個digits = []

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

  7. x/=base 這里注意了這里和上面式子呼應 一個取的是余數(shù) 處以36取到的余數(shù)一定是0-36之間的數(shù),然后可以轉(zhuǎn)換為string,而這里記錄每次除以之后剩余的值
    由于取的是36的n次方 這里也正好可以除n次,這樣的話 就對應了生成多少個隨機數(shù)了。

  8. 然后跳出循環(huán)之后 判斷符號 是否需要追加 負號 也就是 還原負號

  9. 最后再將數(shù)組重新拼接成字符串返回

由此結(jié)束這樣拆開來看 似乎還是比較清晰 合理的。后面再使用了一個 zfill()函數(shù) 不滿這個數(shù)就往前用0補齊。 這樣看來 的確也有夠隨機 而且 base參數(shù)實際上是可變化的。這個算法 蠻有意思 所以在這里 記錄一下。與大家分享。
原文地址:http://www.cnblogs.com/piperck/p/5047378.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,916評論 0 33
  • # 第一優(yōu)先級規(guī)則聲明: # 除了夢境,每一個意識主進程都必須與一個身體參與的機械進程相匹配,否則結(jié)束意識主進程。...
    李洞BarryLi閱讀 4,196評論 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young閱讀 4,194評論 1 10
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評論 19 139
  • 20170902田亦辰爸爸田進心賞19天 親愛的自己,今天下午比較空,自己動手汽車空氣濾芯,空調(diào)濾芯的更換...
    田進ID閱讀 138評論 0 0

友情鏈接更多精彩內(nèi)容