Python随机生成VCard通信录

本来想法抖音和快手都会偷偷上传自己的通信录,我想这样的话,可以把自己的通信录随机很多通信录,然后就可以推荐给很多人看到自己的作品,但是后面想了下,应该是自己通信录有对方的号码,自己可以收到别人的推荐,自己的想法不通,但是写都写了,就发出来看看。

随机姓名代码出处:https://blog.csdn.net/qq_41426326/article/details/91975774

import os
import random

from string import Template


def str_to_hex(str_to_chg):
    # '''将string转换成hex形式的string(参考Quoted-printable编码)'''
    tmp_bytes = bytes(str_to_chg, encoding='utf-8')
    tmp_chars = []
    for each_byte in tmp_bytes:
        tmp_chars.append('=' + str(hex(int(each_byte))).replace('0x', '').upper())
    return ''.join(tmp_chars)


def random_name(sex):

    # 删减部分,比较大众化姓氏
    first_name = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻水云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳鲍史唐" \
                "费岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅卞齐康伍余元卜顾孟平" \
                "黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计成戴宋茅庞熊纪舒屈项祝" \
                "董粱杜阮席季麻强贾路娄危江童颜郭梅盛林刁钟徐邱骆高夏蔡田胡" \
                "凌霍万柯卢莫房缪干解应宗丁宣邓郁单杭洪包诸左石崔吉" \
                "龚程邢滑裴陆荣翁荀羊甄家封芮储靳邴松井富乌焦巴弓牧隗山谷车侯伊" \
                "宁仇祖武符刘景詹束龙叶幸司韶黎乔苍双闻莘劳逄姬冉宰桂牛寿通边燕冀" \
                "尚农温庄晏瞿茹习鱼容向古戈终居衡步都耿满弘国文东殴沃曾关红游盖益桓公晋楚闫"

    first_name2 = "万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊澹台公冶宗政濮阳淳于单于太叔申屠公孙仲孙轩辕令狐钟离宇文长孙慕容鲜于闾丘" \
                  "司徒司空亓官司寇仉督子颛孙端木巫马公西漆雕乐正壤驷公良拓跋夹谷宰父谷梁段干百里东郭南门呼延羊舌微生梁丘左丘东门西门南宫南宫"
    # 女孩名字
    girl = '秀娟英华慧巧美娜静淑惠珠翠雅芝玉萍红娥玲芬芳燕彩春菊兰凤洁梅琳素云莲真环雪荣爱妹霞香月莺媛艳瑞凡佳嘉琼勤珍贞莉桂娣叶璧璐娅琦晶妍' \
           '茜秋珊莎锦黛青倩婷姣婉娴瑾颖露瑶怡婵雁蓓纨仪荷丹蓉眉君琴蕊薇菁梦岚苑婕馨瑗琰韵融园艺咏卿聪澜纯毓悦昭冰爽琬茗羽希宁欣飘育滢馥筠柔' \
           '竹霭凝晓欢霄枫芸菲寒伊亚宜可姬舒影荔枝思丽'
    # 男孩名字
    boy = '伟刚勇毅俊峰强军平保东文辉力明永健世广志义兴良海山仁波宁贵福生龙元全国胜学祥才发武新利清飞彬富顺信子杰涛昌成康星光天达安岩中茂进' \
          '林有坚和彪博诚先敬震振壮会思群豪心邦承乐绍功松善厚庆磊民友裕河哲江超浩亮政谦亨奇固之轮翰朗伯宏言若鸣朋斌梁栋维启克伦翔旭鹏泽晨辰' \
          '士以建家致树炎德行时泰盛雄琛钧冠策腾楠榕风航弘'
    # 名
    name = '中笑贝凯歌易仁器义礼智信友上都卡被好无九加电金马钰玉忠孝'
    # 10%的机遇生成双数姓氏
    if random.choice(range(100)) > 10:
        first_name_name = first_name[random.choice(range(len(first_name)))]
    else:
        i = random.choice(range(len(first_name2)))
        first_name_name = first_name2[i:i + 2]

    name_1 = ""
    # 生成并返回一个名字
    if sex > 0:
        girl_name = girl[random.choice(range(len(girl)))]
        if random.choice(range(2)) > 0:
            name_1 = name[random.choice(range(len(name)))]
        return first_name_name + name_1 + girl_name
    else:
        boy_name = boy[random.choice(range(len(boy)))]
        if random.choice(range(2)) > 0:
            name_1 = name[random.choice(range(len(name)))]
        return first_name_name + name_1 + boy_name


def make_vcard(name, phone_num):
    tem_str = "BEGIN:VCARD\nVERSION:2.1\nN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:$NAME;;;\n" \
              "FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:$NAME\nTEL;CELL:$PHONE_NUM\nEND:VCARD"
    utf_name = str_to_hex(name)
    h_sub = {'NAME': utf_name, 'PHONE_NUM': phone_num}
    ret_str = Template(tem_str)
    ret_str = ret_str.substitute(h_sub)
    return ret_str


def random_sex():
    sex = random.choice(range(2))
    return sex


all_phone = []


# 随机号码
def random_phone(rand_phone_num):
    phone_str = ""
    # 电信 联通 移动
    base_num = [134, 135, 136, 137, 138, 139, 147, 148, 150, 151, 152, 157, 158, 159, 178, 182, 183, 184, 187, 188, 198,
                130, 131, 132, 155, 156, 185, 186, 145, 146, 166, 167, 175, 176, 170, 171, 133, 153, 177, 180, 181, 189,
                191, 199]

    while len(all_phone) < rand_phone_num:
        rand_base_num = random.choice(base_num)
        rand_num = random.randint(1, 99999999)
        phone_num = rand_base_num * 100000000 + rand_num
        if phone_num not in all_phone:
            all_phone.append(phone_num)
            sex = random_sex()
            name = random_name(sex)
            if phone_str != "":
                phone_str += "\n"
            phone_str += make_vcard(name, phone_num)
    # print(phone_str)
    dir_path = './'
    file_name = 'random_phone.vcf'
    if not os.path.isdir(dir_path):
        os.makedirs(dir_path)
    file_path = os.path.join(dir_path, file_name)
    temp_file = open(file_path, "w+")
    temp_file.write(phone_str)
    temp_file.close()


# 构造地区号码
def make_area_phone(base_num, area_num):
    phone_str = ""
    file_name = 'make_area_phone_{0}_{1}.vcf'.format(base_num, area_num)

    # 电信 联通 移动
    base_num = base_num * 100000000
    # 地区代码
    area_num = area_num * 10000

    for i in range(10000):
        print(i)
        rand_num = i
        phone_num = base_num + area_num + rand_num
        sex = random_sex()
        name = random_name(sex)
        if phone_str != "":
            phone_str += "\n"
        phone_str += make_vcard(name, phone_num)
    # print(phone_str)
    dir_path = './'

    if not os.path.isdir(dir_path):
        os.makedirs(dir_path)
    file_path = os.path.join(dir_path, file_name)
    temp_file = open(file_path, "w+")
    temp_file.write(phone_str)
    temp_file.close()


def main():
    make_area_phone(186, 5586)
    # random_phone(2)


if __name__ == "__main__":
    main()

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值