""" 生成隨機姓名、電話號碼、身份證號、性別、應行卡號、郵箱 """ 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]