By Dolphin,BeiJing,20150712

0X00  背景

    最近在学习python 这门语言,刚学完for循环,对于很多语句语法都不太熟悉。就在今天,看到有某个网站的活动,需要输入一个13位的序列号来判断你是否中奖,但是这个13位序列号是需要购买他们家的产品才能获得,得耗费一定的金钱,于是我就在想,是不是能自己写一个序列号生成器来碰碰运气,所以决定运用刚学的python的初级知识进行编写。

0X01  知识点准备

    这个工具主要的功能是生成随机字母做序列号,python中的random()函数的作用就是随机生成一个字符串或数字。下面对所用到的函数进行简单介绍:

    random.randint(a,b)

    随机生成一个范围在 a <=  N  <= b 之内的随机数N,如:

import random
a = random.randint(2,5)
print(a)

    random.randrange(a)

    该函数与上一个功能一样,不同的是只需要一个参数,随机生成的数字范围 0 <= N <= a ,从零开始,到a-1时结束。

import random
a = random.randrange(5)
print(a)

    random.choice(seq)

    此函数功能是从字符串序列seq中随机选择一个字符串,如果序列为空,则返回IndexError.

seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
a   = random.choice(seq)
print(a)

0X02  功能需求

    通过分析已知的13位序列号,发现有规律可循,序列号基本上可以分为两种:

    1、序列号分为三部分,第一部分为前4位为随机字母,第5位和第6位是随机数字,后7位为随机字母;

    2、这种序列号基本无规则,只有一条规则,那就是13位随机序列号中,只能出现2位为随机数字,其余的都随机生成字母;

0X03  源码

    由于刚学python没多久,故只对第一种情况进行编码,第二种情况有兴趣的童鞋可以把编码完善或者简化一下,如以下代码有错或者可以简化的地方,欢迎指出!

#  Random generate some character string 
#  By Dolphin , 20150712
import random

# Generate random string Part One
stra = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'   #定义随机生成字符串的范围
strb = ''
i = 4;
while i > 0 :                         #生成第一部分前4位随机字符串的循环
	strb += random.choice(stra)
	i -= 1
print("Part One:",strb)

#Generate random string Part Two
stra2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
strb2 = ''
i2 = 7
while i2 > 0 :                        #生成第二部分后7位随机字符串的循环
	strb2 += random.choice(stra2)
	i2 -= 1
print("Part Two:",strb2)

# Generate random number              
num1 = str(random.randrange(9))       #生成中间部分的随机数字
num2 = str(random.randrange(9))
s = strb + num1 + num2 + strb2        #将随机生成的三部分字符串进行组合
print(s)

0X04 扩展应用

    通过以上实例进行练习之后,可以对此进行扩展,比如:将随机生成的字符串保存在TXT文本中;或者生成一个13位字符串的"字典";还可以写得更复杂一些,直接写个字典生成工具…… 

    如果你仅仅只是想生成一串13位的随机字符串,没有以上我说的那两个限定条件的话,还有更简洁的代码可以实现,如下:


from random import Random
def random_str(randomlength=8):
    str = ''
    chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789'
    length = len(chars) - 1
    random = Random()
    for i in range(randomlength):
        str+=chars[random.randint(0, length)]
    return str


-------------------------------------------------------------------------------------

参考资料:

1、《The Python Standard Library》, ,

   https://docs.python.org/3/library/random.html#module-random 

2、《Pyhton中的random模块》,Capricorn.python,

   http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html

3、《使用python生成固定长度的随机字符串》,huwei,

   http://www.oschina.net/code/snippet_153443_4752