python随机生成md5及sha256数据(手机号/imei)

脚本要求
  • 需要造手机号或者设备号的数据(加密md5或sha256),也可两者合并(用下划线隔开)
  • 需要造历史月份字段数据,可自定义或者区域随机,也可不带;
  • 需要带目标字段(枚举:0 or 1),也可不带;

应用的库包含:
import pandas as pd
import hashlib
import random
import os
from time import strftime,localtime,mktime

1. 先定义好造数据类型

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

定义不同场景下的字段,如果不需要带辅助参数,调用时online传非0即删除后面两位字段;

2. 定义加密方式的函数

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分别定义一个函数,结合使用

3. 逻辑处理:结合生成样本进行数据处理

def data_list(total,title,encrypt,online,month_b,month_a,label_type,test_c=0):
    result_list=[]
    #定手机号和设备号的开头数据
    num_phone,num_imei=188,98
    #定随机手机号和设备号的限制区间
    num_a,num_b=10000000+test_c,99999999
    num_a2,num_b2=10000000000+test_c,99999999999
    #对区域内月份取值以及枚举的目标值定义
    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次数为需要生成的样本数量
    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. 逻辑处理:对生成的总样本数量控制

def zhu_start(total,title,encrypt,online,month_b,month_a=None,label_type=None,size_m=100):
    #定好需要生成文件的标题
    columns = table_title(title,online)
    time=strftime("%mm%dd%Hh%Mm%Ss",localtime())
    #fuhao是给两者连接的分割符,division是切割作用,分批次生成总样本条数
    fuhao,division="_",1000
    size_kb=(1024*size_m)-(division/10)
    month_aa="" if month_a==None else str(month_a)+"-"
    #file_name是生成的文件名称,只是纯粹用于好区分
    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")
    #小于分割数量的总条数情况,一次性让其生成
    if total <= division:
        file_size=pd_data(total,0)
        print("1、生成样本条数:"+str(total)+"\n2、生成文件大小:"+str(round(file_size/1024,4))+"kb")
    #大于分割数量的总条数情况,分批次生成
    else:
        #此处对余数做了个处理,避免非分割数整数情况导致余数的量未生成
        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)
            #对生成的文件大小做个限制,防止手误生成超大数据,默认不超过100兆
            if (file_size)/1024 > size_kb:
                print("1、生成样本条数:"+str((test_a-1)*division+test_b)+"\n2、生成文件大小:"+str(round(file_size/1024,4))+"kb")
                exit()
        print("1、生成样本条数:"+str((test_a-1)*division+test_b)+"\n2、生成文件大小:"+str(round(file_size/1024,4))+"kb")

4. 历史月份的处理(bug修复)

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))

在后面使用的时候,发现自定义月份区域时跨年会出现数据生产错误;因为月份是12月进一年的,后面加了这块逻辑;对传入的参数用randint方法进行随机取值,解决这个问题;

5. main实例

参数解释如下(*号必填):
#total*:需要生成的样本数量,已默认限制文件生成不大于100M;如想大于可结合size_m使用
#title*:all为四类字段都包含,可设置单独imei或者phone
#encrypt*:加密类型,可设置md5或者sha256
#online*:可设置0(离线)或者1(在线)
#mothe_a:历史月份起始日期 + month_b*历史月份结束日期(随机期间月份);如统一月份month_a不填或者为None
#label_type:可根据要求生成0或者1,不填默认自动随机
#size_m:如想生成大于100M,举例生成101兆,添加size_m=101(单位兆),totale设置无穷大即可
if __name__ == '__main__':
    zhu_start(total=100,title="phone",encrypt="md5",online=1,month_a=202105,month_b=202105,label_type=None)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266