python实现个人信息随机生成

时间:2024-03-10 21:50:08
"""
生成随机姓名、电话号码、身份证号、性别、应行卡号、邮箱
"""
import random
from firstname import first_name
from langconv import *
from province_id import province_id
from phone_number import phone_number
# from langconv import Converter



# 随机生成姓名
def get_name():
    name_code = \'\'
    # 在百家姓列表里面随便选择一个姓
    name_code+=random.choice(first_name)
    ran_num = random.randint(0,1)
    # 为0生成的名字是两个字,为1生成的名字是一个字
    if ran_num ==0:
        for i in range(2):
            # 从十进制汉字编码随机选取一个
            ran = random.randint(19968,40869)
            # 将其转换为汉字
            ran = chr(ran)
            name_code+=ran
    else:
        # 从十进制汉字编码随机选取一个
        ran = random.randint(19968, 40869)
        # 将其转换为汉字
        ran = chr(ran)
        name_code += ran
    # 将name_code里面的繁体字转换为简体字
    name_code = Converter(\'zh-hans\').convert(name_code)
    # 编码
    name_code.encode(\'utf-8\')
    return name_code

# 随机生成身份证号
def get_idnum():
    id_num = \'\'
    # 随机选择地址码
    id_num+=str(random.choice(province_id))
    # 随机生成4-6位地址码
    for i in range(4):
        ran_num = str(random.randint(0,9))
        id_num+=ran_num
    b = get_birthday()
    id_num+=b
    # 生成15、16位顺序号
    num = \'\'
    for i in range(2):
        num += str(random.randint(0,9))
    id_num+=num
    # 通过性别判断生成第十七位数字 男单 女双
    s = get_sex()
    print("性别:",s)
    if s ==\'\':
        # 生成奇数
        seventeen_num = random.randrange(1,9,2)
    else:
        seventeen_num = random.randrange(2,9,2)
    id_num+=str(seventeen_num)
    eighteen_num = str(random.randint(1,10))
    if eighteen_num ==\'10\':
        eighteen_num = \'X\'
    id_num+=eighteen_num
    return id_num



# 随机生成出生日期
def get_birthday():
    # 随机生成年月日
    year = random.randint(1960,2000)
    month = random.randint(1,12)
    # 判断每个月有多少天随机生成日
    if year%4 ==0:
        if month in (1,3,5,7,8,10,12):
            day = random.randint(1,31)
        elif month in (4,6,9,11):
            day = random.randint(1,30)
        else:
            day = random.randint(1,29)
    else:
        if month in (1,3,5,7,8,10,12):
            day = random.randint(1,31)
        elif month in (4,6,9,11):
            day = random.randint(1,30)
        else:
            day = random.randint(1,28)
    # 小于10的月份前面加0
    if month < 10:
        month = \'0\' + str(month)
    if day < 10:
        day = \'0\' + str(day)
    birthday = str(year)+str(month)+str(day)
    return birthday

# 匿名函数
get_sex = lambda :random.choice([\'\',\'\'])


# 随机生成手机号
def get_tel():
    tel = \'\'
    tel+=str(random.choice(phone_number))
    ran = \'\'
    for i in range(8):
        ran += str(random.randint(0,9))
    tel +=ran
    return tel

# 随机生成银行卡号
def get_card_id():
    card_id = \'62\'
    for i in range(17):
        ran = str(random.randint(0,9))
        card_id += ran
    return card_id

# 随机生成邮箱
def get_email():
    email_suf = random.choice([\'@163.com\',\'@qq.com\',\'@126.com\',\'@sina.com\',\'@sina.cn\',\'@soho.com\',\'@yeah.com\'])
    phone = get_tel()
    email = phone + email_suf
    print("手机号:",phone)
    return email

x = get_name()
print("姓名:",x)
y = get_idnum()
print("身份证号:",y)
z = get_email()
print("邮箱:",z)
w = get_card_id()
print("银行卡号:",w)
firstname.py
"""
百家姓列表
"""
first_name = [\'\' ,\'\', \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\'
                ,\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'羿\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'宿\',\'\',\'怀\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'寿\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'广\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'万俟\',\'司马\',\'上官\',\'欧阳\',\'夏侯\',\'诸葛\',\'闻人\',\'东方\',\'赫连\',
                \'皇甫\',\'尉迟\',\'公羊\',\'澹台\',\'公冶\',\'宗政\',\'濮阳\',\'淳于\',\'单于\',\'太叔\',\'申屠\',\'公孙\',\'仲孙\',
                \'轩辕\',\'令狐\',\'钟离\',\'宇文\',\'长孙\',\'慕容\',\'鲜于\',\'闾丘\',\'司徒\',\'司空\',\'亓官\',\'司寇\',\'\',\'\',
                \'子车\',\'颛孙\',\'端木\',\'巫马\',\'公西\',\'漆雕\',\'乐正\',\'壤驷\',\'公良\',\'拓跋\',\'夹谷\',\'宰父\',\'谷梁\',\'\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'段干\',\'百里\',\'东郭\',\'南门\',\'呼延\',\'\',\'\',\'羊舌\',\'微生\',
                \'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'梁丘\',\'左丘\',\'东门\',\'西门\',\'\',\'\',\'\',\'\',\'\',
                \'\',\'南宫\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\',\'\']
langconv.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from copy import deepcopy
import re

try:
    import psyco
    psyco.full()
except:
    pass

try:
    from zh_wiki import zh2Hant, zh2Hans
except ImportError:
    from zhtools.zh_wiki import zh2Hant, zh2Hans

import sys
py3k = sys.version_info >= (3, 0, 0)

if py3k:
    UEMPTY = \'\'
else:
    _zh2Hant, _zh2Hans = {}, {}
    for old, new in ((zh2Hant, _zh2Hant), (zh2Hans, _zh2Hans)):
        for k, v in old.items():
            new[k.decode(\'utf8\')] = v.decode(\'utf8\')
    zh2Hant = _zh2Hant
    zh2Hans = _zh2Hans
    UEMPTY = \'\'.decode(\'utf8\')

# states
(START, END, FAIL, WAIT_TAIL) = list(range(4))
# conditions
(TAIL, ERROR, MATCHED_SWITCH, UNMATCHED_SWITCH, CONNECTOR) = list(range(5))

MAPS = {}

class Node(object):
    def __init__(self, from_word, to_word=None, is_tail=True,
            have_child=False):
        self.from_word = from_word
        if to_word is None:
            self.to_word = from_word
            self.data = (is_tail, have_child, from_word)
            self.is_original = True
        else:
            self.to_word = to_word or from_word
            self.data = (is_tail, have_child, to_word)
            self.is_original = False
        self.is_tail = is_tail
        self.have_child = have_child

    def is_original_long_word(self):
        return self.is_original and len(self.from_word)>1

    def is_follow(self, chars):
        return chars != self.from_word[:-1]

    def __str__(self):
        return \'<Node, %s, %s, %s, %s>\' % (repr(self.from_word),
                repr(self.to_word), self.is_tail, self.have_child)

    __repr__ = __str__

class ConvertMap(object):
    def __init__(self, name, mapping=None):
        self.name = name
        self._map = {}
        if mapping:
            self.set_convert_map(mapping)

    def set_convert_map(self, mapping):
        convert_map = {}
        have_child = {}
        max_key_length = 0
        for key in sorted(mapping.keys()):
            if len(key)>1:
                for i in range(1, len(key)):
                    parent_key = key[:i]
                    have_child[parent_key] = True
            have_child[key] = False
            max_key_length = max(max_key_length, len(key))
        for key in sorted(have_child.keys()):
            convert_map[key] = (key in mapping, have_child[key],
                    mapping.get(key, UEMPTY))
        self._map = convert_map
        self.max_key_length = max_key_length

    def __getitem__(self, k):
        try:
            is_tail, have_child, to_word  = self._map[k]
            return Node(k, to_word, is_tail, have_child)
        except:
            return Node(k)

    def __contains__(self, k):
        return k in self._map

    def __len__(self):
        return len(self._map)

class StatesMachineException(Exception): pass

class StatesMachine(object):
    def __init__(self):
        self.state = START
        self.final = UEMPTY
        self.len = 0
        self.pool = UEMPTY

    def clone(self, pool):
        new = deepcopy(self)
        new.state = WAIT_TAIL
        new.pool = pool
        return new

    def feed(self, char, map):
        node = map[self.pool+char]

        if node.have_child:
            if node.is_tail:
                if node.is_original:
                    cond = UNMATCHED_SWITCH
                else:
                    cond = MATCHED_SWITCH
            else:
                cond = CONNECTOR
        else:
            if node.is_tail:
                cond = TAIL
            else:
                cond = ERROR

        new = None
        if cond == ERROR:
            self.state = FAIL
        elif cond == TAIL:
            if self.state == WAIT_TAIL and node.is_original_long_word():
                self.state = FAIL
            else:
                self.final += node.to_word
                self.len += 1
                self.pool = UEMPTY
                self.state = END
        elif self.state == START or self.state == WAIT_TAIL:
            if cond == MATCHED_SWITCH:
                new = self.clone(node.from_word)
                self.final += node.to_word
                self.len += 1
                self.state = END
                self.pool = UEMPTY
            elif cond == UNMATCHED_SWITCH or cond == CONNECTOR:
                if self.state == START:
                    new = self.clone(node.from_word)
                    self.final += node.to_word
                    self.len += 1
                    self.state = END
                else:
                    if node.is_follow(self.pool):
                        self.state = FAIL
                    else:
                        self.pool = node.from_word
        elif self.state == END:
            # END is a new START
            self.state = START
            new = self.feed(char, map)
        elif self.state == FAIL:
            raise StatesMachineException(\'Translate States Machine \'
                    \'have error with input data %s\' % node)
        return new

    def __len__(self):
        return self.len + 1

    def __str__(self):
        return \'<StatesMachine %s, pool: "%s", state: %s, final: %s>\' % (
                id(self), self.pool, self.state, self.final)
    __repr__ = __str__

class Converter(object):
    def __init__(self, to_encoding):
        self.to_encoding = to_encoding
        self.map = MAPS[to_encoding]
        self.start()

    def feed(self, char):
        branches = []
        for fsm in self.machines:
            new = fsm.feed(char, self.map)
            if new:
                branches.append(new)
        if branches:
            self.machines.extend(branches)
        self.machines = [fsm for fsm in self.machines if fsm.state != FAIL]
        all_ok = True
        for fsm in self.machines:
            if fsm.state != END:
                all_ok = False
        if all_ok:
            self._clean()
        return self.get_result()

    def _clean(self):
        if len(self.machines):
            self.machines.sort(key=lambda x: len(x))
            # self.machines.sort(cmp=lambda x,y: cmp(len(x), len(y)))
            self.final += self.machines[0].final
        self.machines = [StatesMachine()]

    def start(self):
        self.machines = [StatesMachine()]
        self.final = UEMPTY

    def end(self):
        self.machines = [fsm for fsm in self.machines
                if fsm.state == FAIL or fsm.state == END]
        self._clean()

    def convert(self, string):
        self.start()
        for char in string:
            self.feed(char)
        self.end()
        return self.get_result()

    def get_result(self):
        return self.final


def registery(name, mapping):
    global MAPS
    MAPS[name] = ConvertMap(name, mapping)

registery(\'zh-hant\', zh2Hant)
registery(\'zh-hans\', zh2Hans)
del zh2Hant, zh2Hans


def run():
    import sys
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option(\'-e\', type=\'string\', dest=\'encoding\',
            help=\'encoding\')
    parser.add_option(\'-f\', type=\'string\', dest=\'file_in\',
            help=\'input file (- for stdin)\')
    parser.add_option(\'-t\', type=\'string\', dest=\'file_out\',
            help=\'output file\')
    (options, args) = parser.parse_args()
    if not options.encoding:
        parser.error(\'encoding must be set\')
    if options.file_in:
        if options.file_in == \'-\':
            file_in = sys.stdin
        else:
            file_in = open(options.file_in)
    else:
        file_in = sys.stdin
    if options.file_out:
        if options.file_out == \'-\':
            file_out = sys.stdout
        else:
            file_out = open(options.file_out, \'wb\')
    else:
        file_out = sys.stdout

    c = Converter(options.encoding)
    for line in file_in:
        # print >> file_out, c.convert(line.rstrip(\'\n\').decode(
        file_out.write(c.convert(line.rstrip(\'\n\').decode(
            \'utf8\')).encode(\'utf8\'))


if __name__ == \'__main__\':
    run()
province_id.py

"""
各身份前两位地址码
"""
province_id = [11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,
               50,51,52,53,54,61,62,63,65,65,81,82,83]
phone_number.py

# 手机号开头
phone_number = [139,138,137,136,135,134,159,158,15,150,151,152,188,
                130,131,132,156,155,133,153,189]