[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import ttk, messagebox
import random
import os
from datetime import datetime
COUNTRIES = {
"全球随机": None,
"中国大陆": ("+86", 11, ["13","14","15","16","17","18","19"]),
"中国香港": ("+852", 8, ["4","5","6","8","9"]),
"中国澳门": ("+853", 8, ["6"]),
"中国台湾": ("+886", 9, ["9"]),
"美国": ("+1", 10, None),
"加拿大": ("+1", 10, None),
"英国": ("+44", 10, ["7"]),
"德国": ("+49", 11, ["15","16","17"]),
"法国": ("+33", 9, ["6","7"]),
"意大利": ("+39", 10, ["3"]),
"西班牙": ("+34", 9, ["6","7"]),
"荷兰": ("+31", 9, ["6"]),
"比利时": ("+32", 9, ["4"]),
"瑞士": ("+41", 9, ["7"]),
"奥地利": ("+43", 10, ["6"]),
"瑞典": ("+46", 9, ["7"]),
"挪威": ("+47", 8, ["4","9"]),
"丹麦": ("+45", 8, None),
"芬兰": ("+358", 9, ["4","5"]),
"波兰": ("+48", 9, ["5","6","7","8"]),
"俄罗斯": ("+7", 10, ["9","9"]),
"乌克兰": ("+380", 9, ["39","50","63","66","67","68","73","9"]),
"土耳其": ("+90", 10, ["5"]),
"希腊": ("+30", 10, ["6"]),
"葡萄牙": ("+351", 9, ["9"]),
"匈牙利": ("+36", 9, ["20","30","31","70"]),
"捷克": ("+420", 9, ["6","7"]),
"罗马尼亚": ("+40", 9, ["7"]),
"保加利亚": ("+359", 9, ["8"]),
"克罗地亚": ("+385", 9, ["9"]),
"塞尔维亚": ("+381", 9, ["6"]),
"斯洛文尼亚": ("+386", 8, ["3","4","5","6","7"]),
"爱尔兰": ("+353", 9, ["8"]),
"冰岛": ("+354", 7, None),
"澳大利亚": ("+61", 9, ["4"]),
"新西兰": ("+64", 8, ["2"]),
"日本": ("+81", 10, ["70","80","90"]),
"韩国": ("+82", 10, ["10","11","12","16","17","18","19"]),
"泰国": ("+66", 9, ["6","8","9"]),
"越南": ("+84", 9, ["3","5","7","8","9"]),
"马来西亚": ("+60", 9, ["1"]),
"新加坡": ("+65", 8, ["8","9"]),
"印尼": ("+62", 10, ["8"]),
"菲律宾": ("+63", 10, ["9"]),
"印度": ("+91", 10, ["6","7","8","9"]),
"巴基斯坦": ("+92", 10, ["3"]),
"孟加拉国": ("+880", 10, ["1"]),
"斯里兰卡": ("+94", 9, ["7"]),
"尼泊尔": ("+977", 10, ["9"]),
"阿联酋": ("+971", 9, ["5"]),
"沙特阿拉伯": ("+966", 9, ["5"]),
"卡塔尔": ("+974", 8, ["3","5","6","7"]),
"科威特": ("+965", 8, None),
"以色列": ("+972", 9, ["5"]),
"埃及": ("+20", 10, ["1"]),
"南非": ("+27", 9, ["6","7","8"]),
"尼日利亚": ("+234", 10, ["7","8","9"]),
"肯尼亚": ("+254", 9, ["7"]),
"巴西": ("+55", 11, ["6","7","8","9"]),
"阿根廷": ("+54", 10, ["9"]),
"智利": ("+56", 9, ["9"]),
"墨西哥": ("+52", 10, [""]),
"哥伦比亚": ("+57", 10, ["3"]),
"秘鲁": ("+51", 9, ["9"]),
"委内瑞拉": ("+58", 10, ["4"]),
"阿尔巴尼亚": ("+355", 9, ["6"]),
"阿尔及利亚": ("+213", 9, ["5","6","7"]),
"安哥拉": ("+244", 9, ["9"]),
"阿根廷": ("+54", 10, ["9"]),
"亚美尼亚": ("+374", 8, ["5","7","9"]),
"奥兰群岛": ("+358", 10, None),
"巴林": ("+973", 8, None),
"白俄罗斯": ("+375", 9, ["29","33","44"]),
"贝宁": ("+229", 8, None),
"玻利维亚": ("+591", 8, None),
"波黑": ("+387", 8, ["6"]),
"博茨瓦纳": ("+267", 8, None),
"文莱": ("+673", 7, None),
"柬埔寨": ("+855", 8, ["1","8","9"]),
"喀麦隆": ("+237", 9, None),
"中非共和国": ("+236", 8, None),
"乍得": ("+235", 8, None),
"刚果(布)": ("+242", 9, None),
"刚果(金)": ("+243", 9, ["8","9"]),
"科特迪瓦": ("+225", 8, None),
"吉布提": ("+253", 8, None),
"多米尼加": ("+1", 10, ["809","829","849"]),
"厄瓜多尔": ("+593", 9, ["9"]),
"萨尔瓦多": ("+503", 8, None),
"埃塞俄比亚": ("+251", 9, ["9"]),
"法罗群岛": ("+298", 6, None),
"斐济": ("+679", 7, None),
"加蓬": ("+241", 7, None),
"冈比亚": ("+220", 7, None),
"格鲁吉亚": ("+995", 9, ["5","7"]),
"加纳": ("+233", 9, ["2","5"]),
"直布罗陀": ("+350", 8, None),
"格陵兰": ("+299", 6, None),
"危地马拉": ("+502", 8, None),
"几内亚": ("+224", 9, None),
"几内亚比绍": ("+245", 9, None),
"圭亚那": ("+592", 7, None),
"海地": ("+509", 8, None),
"洪都拉斯": ("+504", 8, None),
"伊朗": ("+98", 10, ["9"]),
"伊拉克": ("+964", 10, ["7"]),
"牙买加": ("+1", 10, ["876"]),
"约旦": ("+962", 9, ["7"]),
"哈萨克斯坦": ("+7", 10, ["7"]),
"科索沃": ("+383", 8, None),
"吉尔吉斯斯坦": ("+996", 9, ["5","7","9"]),
"老挝": ("+856", 8, ["2","0"]),
"拉脱维亚": ("+371", 8, None),
"黎巴嫩": ("+961", 8, ["3","7","8"]),
"莱索托": ("+266", 8, None),
"利比里亚": ("+231", 8, None),
"利比亚": ("+218", 9, ["9"]),
"列支敦士登": ("+423", 7, None),
"立陶宛": ("+370", 8, None),
"卢森堡": ("+352", 9, ["6"]),
"马达加斯加": ("+261", 9, ["3"]),
"马拉维": ("+265", 9, None),
"马尔代夫": ("+960", 7, None),
"马里": ("+223", 8, None),
"马耳他": ("+356", 8, None),
"毛里求斯": ("+230", 8, None),
"毛里塔尼亚": ("+222", 8, None),
"摩纳哥": ("+377", 8, None),
"蒙古": ("+976", 8, None),
"黑山": ("+382", 8, ["6"]),
"摩洛哥": ("+212", 9, ["6","7"]),
"莫桑比克": ("+258", 9, None),
"缅甸": ("+95", 9, ["9"]),
"纳米比亚": ("+264", 8, ["8"]),
"尼加拉瓜": ("+505", 8, None),
"尼日尔": ("+227", 8, None),
"巴勒斯坦": ("+970", 9, ["5"]),
"巴拿马": ("+507", 8, None),
"巴拉圭": ("+595", 9, ["9"]),
"卢旺达": ("+250", 9, ["7"]),
"圣马力诺": ("+378", 10, None),
"塞内加尔": ("+221", 9, None),
"塞舌尔": ("+248", 7, None),
"塞拉利昂": ("+232", 8, None),
"斯洛伐克": ("+421", 9, ["9"]),
"索马里": ("+252", 8, None),
"南苏丹": ("+211", 9, None),
"苏丹": ("+249", 9, None),
"苏里南": ("+597", 7, None),
"斯威士兰": ("+268", 8, None),
"叙利亚": ("+963", 9, ["9"]),
"塔吉克斯坦": ("+992", 9, None),
"坦桑尼亚": ("+255", 9, ["6","7"]),
"东帝汶": ("+670", 8, None),
"多哥": ("+228", 8, None),
"汤加": ("+676", 5, None),
"突尼斯": ("+216", 8, None),
"土库曼斯坦": ("+993", 8, None),
"乌干达": ("+256", 9, ["7"]),
"乌拉圭": ("+598", 8, ["9"]),
"乌兹别克斯坦": ("+998", 9, ["9"]),
"梵蒂冈": ("+39", 10, None),
"也门": ("+967", 9, ["7"]),
"赞比亚": ("+260", 9, ["9"]),
"津巴布韦": ("+263", 9, None),
}
def generate_phones():
try:
count = int(entry_count.get() or "1000")
if not 1 <= count <= 1000000:
raise
except:
messagebox.showerror("错误", "数量范围:1 ~ 1,000,000")
return
country = combo.get()
phones = []
progress['value'] = 0
root.update()
step = max(1, count // 100)
for i in range(count):
if i % step == 0:
progress['value'] = (i + 1) / count * 100
root.update()
if country == "全球随机":
prefix, length, starts = random.choice([v for v in COUNTRIES.values() if v])
else:
prefix, length, starts = COUNTRIES[country]
phone = prefix
remain = length
if starts:
start = random.choice(starts)
phone += start
remain -= len(start)
phone += ''.join(str(random.randint(0,9)) for _ in range(remain))
phones.append(phone)
desktop = os.path.join(os.path.expanduser("~"), "Desktop")
name = f"{country}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" if country != "全球随机" else f"全球随机_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
path = os.path.join(desktop, name)
with open(path, "w", encoding="utf-8") as f:
f.write("\n".join(phones))
progress['value'] = 100
messagebox.showinfo("生成完成!", f"成功生成 {count:,} 条手机号!\n\n已保存到桌面:\n{name}")
root = tk.Tk()
root.title("全球手机号生成器by:煎饼")
root.geometry("620x520")
root.configure(bg="#121212")
root.resizable(False, False)
title = tk.Label(root, text="煎饼手机号生成器", font=("微软雅黑", 28, "bold"), fg="#00D4FF", bg="#121212")
title.pack(pady=(40, 20))
subtitle = tk.Label(root, text="全球覆盖所有号段", font=("微软雅黑", 12), fg="#888", bg="#121212")
subtitle.pack()
frame1 = tk.Frame(root, bg="#121212")
frame1.pack(pady=20)
tk.Label(frame1, text="选择国家/地区:", font=("微软雅黑", 14), fg="white", bg="#121212").pack(side="left", padx=10)
combo = ttk.Combobox(frame1, values=sorted(COUNTRIES.keys()), width=30, state="readonly", font=("微软雅黑", 12))
combo.set("中国大陆")
combo.pack(side="left", padx=10)
frame2 = tk.Frame(root, bg="#121212")
frame2.pack(pady=10)
tk.Label(frame2, text="生成数量:", font=("微软雅黑", 14), fg="white", bg="#121212").pack(side="left", padx=10)
entry_count = tk.Entry(frame2, width=20, font=("微软雅黑", 14), justify="center", bg="#2d2d2d", fg="white", insertbackground="white")
entry_count.insert(0, "5000")
entry_count.pack(side="left", padx=10)
progress = ttk.Progressbar(root, length=500, mode="determinate", style="blue.Horizontal.TProgressbar")
progress.pack(pady=20)
btn = tk.Button(root, text="开始生成并保存到桌面", font=("微软雅黑", 18, "bold"), bg="#00D4FF", fg="black",
activebackground="#00ffae", activeforeground="black", relief="flat", padx=40, pady=15, command=generate_phones)
btn.pack(pady=20)
btn.configure(cursor="hand2")
footer = tk.Label(root, text="支持煎饼,由你做起", font=("微软雅黑", 10), fg="#666", bg="#121212")
footer.pack(side="bottom", pady=20)
style = ttk.Style()
style.theme_use('clam')
style.configure("blue.Horizontal.TProgressbar", foreground='#00D4FF', background='#00D4FF')
root.mainloop()