random 函数作为 python 中生成随机数据的主要函数,在我们造数据的过程中有着非常广阔的应用
以下是 random 函数的几种主要用法:
print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') ) # 从序列中随机选取一个元素
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数
print random.sample('zyxwvnmlkjihgfedcba',5) # 多个字符中生成指定数量的随机字符
我以自己刚在新公司写的一个脚本为例:需要批量生成 C 端的账号,我需要每次生成随机的手机号、身份证号再去调注册接口、认证接口。批量生成随机的手机号和身份证号会有很多应用到 Random 函数的地方。
手机号码:3 位前缀 +8 位随机数字
随机取 3 位前缀:
list = ['130','134','135','137','139','181','188','189']
temp = random.choice(list)
8 位随机数字,这里提供 2 种写法:
mobile = temp+''.join(random.choice("0123456789") for i in range(8))
mobile = temp + ''.join(random.sample(string.digits,8))
身份证号码:6 位地区码 + 出生日期 + 三位随机数 + 权重位
6 位地区码,如果想取值范围广一些,大家可以把地区码写到.txt 或者 excel 里面去读取,我这里就随机列了一些地区码去取:
arealist = [ "440301","370600", "370601", "370602", "370611", "370612", "370613", "370634", "370681",
"370682", "370683", ]
area = random.choice(arealist)
随机生成出生日期,这里我的方法是在一个范围区间随机取一个时间戳,但是 time.mktime() 方法有个坑,不能输入 1970 年之前的日期:
start = (1971, 1, 17, 17, 3, 38, 1, 48, 0)
end = (2001, 12, 1, 12, 10, 10, 10, 10, 10)
start_time = time.mktime(start)
end_time = time.mktime(end)
s = random.randint(start_time,end_time)
toule = time.localtime(s)
birth = time.strftime("%Y%m%d",toule)
生成 3 位随机数:
d = random.randint(100,999)
最后一位权重码计算:
temp = area+str(birth)+str(id)
count=0
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
checkcode = {0:'1',1:'0', 2:'X', 3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}
for i in range(0,len(temp)):
tes = int(temp[i])
count = count+tes*weight[i]
last = count%11
lastcode = checkcode[last]
IDcard = temp + ''.join(lastcode)