Random 函式在批量造資料中的運用

kisom發表於2020-12-08

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) ) # 生成從1100的間隔為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)

相關文章