python隨機(jī)生成md5及sha256數(shù)據(jù)(手機(jī)號/imei)

腳本要求
  • 需要造手機(jī)號或者設(shè)備號的數(shù)據(jù)(加密md5或sha256)缤苫,也可兩者合并(用下劃線隔開)
  • 需要造歷史月份字段數(shù)據(jù)豹绪,可自定義或者區(qū)域隨機(jī),也可不帶镇防;
  • 需要帶目標(biāo)字段(枚舉:0 or 1),也可不帶纽门;

應(yīng)用的庫包含:
import pandas as pd
import hashlib
import random
import os
from time import strftime,localtime,mktime

1. 先定義好造數(shù)據(jù)類型

def table_title(title,online):
    if title=="all":
        columns = ["imei","phone","歷史月份", "結(jié)果值"]
    elif title=="imei":
        columns = ["imei","歷史月份", "結(jié)果值"]
    elif title=="phone":
        columns = ["phone","歷史月份", "結(jié)果值"]
    online_columns=columns[:-2]
    table_title=columns if online==0 else online_columns
    return table_title

定義不同場景下的字段,如果不需要帶輔助參數(shù)营罢,調(diào)用時online傳非0即刪除后面兩位字段;

2. 定義加密方式的函數(shù)

def md5(data_md5):
    data_md5=hashlib.md5(data_md5.encode(encoding='UTF-8')).hexdigest()
    return data_md5
def sha256(data_sha256):
    data_sha256 = hashlib.sha256(data_sha256.encode(encoding='UTF-8')).hexdigest()
    return data_sha256

md5和sha256分別定義一個函數(shù)饼齿,結(jié)合使用

3. 邏輯處理:結(jié)合生成樣本進(jìn)行數(shù)據(jù)處理

def data_list(total,title,encrypt,online,month_b,month_a,label_type,test_c=0):
    result_list=[]
    #定手機(jī)號和設(shè)備號的開頭數(shù)據(jù)
    num_phone,num_imei=188,98
    #定隨機(jī)手機(jī)號和設(shè)備號的限制區(qū)間
    num_a,num_b=10000000+test_c,99999999
    num_a2,num_b2=10000000000+test_c,99999999999
    #對區(qū)域內(nèi)月份取值以及枚舉的目標(biāo)值定義
    def month_handle(month_a):
        month_a=month_b-1 if month_a==None else month_a
        month=month_bug(str(month_a),str(month_b))
        label =random.randint(0,1) if label_type==None else label_type
        return month,label
    #total次數(shù)為需要生成的樣本數(shù)量
    for i in range(total):
        num_data=str(random.randint(num_a, num_b))
        num_data2=str(random.randint(num_a2, num_b2))
        #生成所有字段都需要的情況
        if title=="all":
            phone=md5(str(num_phone) + num_data) if encrypt=="md5" else sha256(str(num_phone) + num_data)
            imei =md5(str(num_imei) + num_data2) if encrypt=="md5"  else sha256(str(num_imei) + num_data2)
            if online==0:
                month,label=month_handle(month_a)
                result_list.append([imei,phone,month,label])
            else:
                result_list.append([imei,phone])
        #生成imei需要的情況
        elif title=="imei":
            imei =md5(str(num_imei)+ num_data2) if encrypt=="md5" else sha256(str(num_imei) + num_data2)
            if online==0:
                month,label=month_handle(month_a)
                result_list.append([imei,month,label])
            else:
                result_list.append([imei])
        #生成phone需要的情況
        elif title=="phone":
            phone=md5(str(num_phone) + num_data) if encrypt=="md5" else sha256(str(num_phone)+ num_data)
            if online==0:
                month,label=month_handle(month_a)
                result_list.append(["_"+phone,month,label])
            else:
                result_list.append(["_"+phone])
    return result_list

4. 邏輯處理:對生成的總樣本數(shù)量控制

def zhu_start(total,title,encrypt,online,month_b,month_a=None,label_type=None,size_m=100):
    #定好需要生成文件的標(biāo)題
    columns = table_title(title,online)
    time=strftime("%mm%dd%Hh%Mm%Ss",localtime())
    #fuhao是給兩者連接的分割符饲漾,division是切割作用,分批次生成總樣本條數(shù)
    fuhao,division="_",1000
    size_kb=(1024*size_m)-(division/10)
    month_aa="" if month_a==None else str(month_a)+"-"
    #file_name是生成的文件名稱缕溉,只是純粹用于好區(qū)分
    file_name=str(total)+fuhao+title+fuhao+encrypt+fuhao+str(month_aa)+str(month_b)+fuhao+time
    def  pd_data(division,test_c=0):
        result_list = data_list(total,title,encrypt,month_a=month_a,month_b=month_b,online=online,label_type=label_type)
        dt = pd.DataFrame(result_list,columns=columns)
        dt.to_csv(file_name+".csv",mode="a",index=0, encoding="gb2312")
        return os.path.getsize(file_name+".csv")
    #小于分割數(shù)量的總條數(shù)情況考传,一次性讓其生成
    if total <= division:
        file_size=pd_data(total,0)
        print("1、生成樣本條數(shù):"+str(total)+"\n2证鸥、生成文件大辛爬恪:"+str(round(file_size/1024,4))+"kb")
    #大于分割數(shù)量的總條數(shù)情況,分批次生成
    else:
        #此處對余數(shù)做了個處理枉层,避免非分割數(shù)整數(shù)情況導(dǎo)致余數(shù)的量未生成
        test_a,test_b=int(total/division),total%division
        test_a=test_a+1 if test_b != 0 else test_a
        for i in range(test_a):
            fale_header=True if i==0 else None
            test_c=i*division
            division=test_b if i==test_a-1 else division
            file_size=pd_data(division,test_c)
            #對生成的文件大小做個限制泉褐,防止手誤生成超大數(shù)據(jù),默認(rèn)不超過100兆
            if (file_size)/1024 > size_kb:
                print("1鸟蜡、生成樣本條數(shù):"+str((test_a-1)*division+test_b)+"\n2膜赃、生成文件大小:"+str(round(file_size/1024,4))+"kb")
                exit()
        print("1揉忘、生成樣本條數(shù):"+str((test_a-1)*division+test_b)+"\n2跳座、生成文件大卸祟酢:"+str(round(file_size/1024,4))+"kb")

4. 歷史月份的處理(bug修復(fù))

def month_bug(month_a,month_b):
    start_a,start_b=month_a[:-2],month_a[-2:]
    end_a,end_b=month_b[:-2],month_b[-2:]
    a1=(int(start_a),int(start_b),1,0,0,0,0,0,0) 
    a2=(int(end_a),int(end_b),31,23,59,59,0,0,0) 
    t=random.randint(mktime(a1),mktime(a2)) 
    return strftime("%Y%m",localtime(t))

在后面使用的時候,發(fā)現(xiàn)自定義月份區(qū)域時跨年會出現(xiàn)數(shù)據(jù)生產(chǎn)錯誤疲眷;因為月份是12月進(jìn)一年的禾蚕,后面加了這塊邏輯;對傳入的參數(shù)用randint方法進(jìn)行隨機(jī)取值狂丝,解決這個問題换淆;

5. main實例

參數(shù)解釋如下(*號必填):
#total*:需要生成的樣本數(shù)量,已默認(rèn)限制文件生成不大于100M美侦;如想大于可結(jié)合size_m使用
#title*:all為四類字段都包含产舞,可設(shè)置單獨imei或者phone
#encrypt*:加密類型,可設(shè)置md5或者sha256
#online*:可設(shè)置0(離線)或者1(在線)
#mothe_a:歷史月份起始日期 + month_b*歷史月份結(jié)束日期(隨機(jī)期間月份)菠剩;如統(tǒng)一月份month_a不填或者為None
#label_type:可根據(jù)要求生成0或者1易猫,不填默認(rèn)自動隨機(jī)
#size_m:如想生成大于100M,舉例生成101兆具壮,添加size_m=101(單位兆)准颓,totale設(shè)置無窮大即可
if __name__ == '__main__':
    zhu_start(total=100,title="phone",encrypt="md5",online=1,month_a=202105,month_b=202105,label_type=None)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棺妓,隨后出現(xiàn)的幾起案子攘已,更是在濱河造成了極大的恐慌,老刑警劉巖怜跑,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件样勃,死亡現(xiàn)場離奇詭異,居然都是意外死亡性芬,警方通過查閱死者的電腦和手機(jī)峡眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來植锉,“玉大人辫樱,你說我怎么就攤上這事】”樱” “怎么了狮暑?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辉饱。 經(jīng)常有香客問我搬男,道長,這世上最難降的妖魔是什么彭沼? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任止后,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘译株。我一直安慰自己瓜喇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布歉糜。 她就那樣靜靜地躺著乘寒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匪补。 梳的紋絲不亂的頭發(fā)上伞辛,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音夯缺,去河邊找鬼蚤氏。 笑死,一個胖子當(dāng)著我的面吹牛踊兜,可吹牛的內(nèi)容都是我干的竿滨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼捏境,長吁一口氣:“原來是場噩夢啊……” “哼于游!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垫言,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤贰剥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筷频,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚌成,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年凛捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了担忧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡葵袭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乖菱,到底是詐尸還是另有隱情坡锡,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布窒所,位于F島的核電站鹉勒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吵取。R本人自食惡果不足惜禽额,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脯倒,春花似錦实辑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至悠反,卻和暖如春残黑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斋否。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工梨水, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茵臭。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓疫诽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笼恰。 傳聞我的和親對象是個殘疾皇子踊沸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348