我11楼啥时候给我激活下呀?格式不对么?
好资料,下载一个,学习一下。
楚狂客 发表于 2026-8-7 08:57
我11楼啥时候给我激活下呀?格式不对么?
学校换成你自己的学校重新发一下
提示这个被阻止的内容此文件中的 ActiveX 内容被阻止。怎么办
楚狂客 发表于 2026-8-5 08:43
机器码:955BA2ADABF8E774
学校名:沙雅县英买力镇中心小学
楼主可能没有看到,临时给楼主代劳一下吧
看看行不行
F6E543A1F7687677388FA7C0927625C12608079999
linxiansen 发表于 2026-8-7 16:43
提示这个被阻止的内容此文件中的 ActiveX 内容被阻止。怎么办
问一下AI{:lol:}
zylz9941 发表于 2026-8-7 17:30
楼主可能没有看到,临时给楼主代劳一下吧
看看行不行
谢谢{:lol:}
又搞了一个
ZZDdong 发表于 2026-8-7 20:30
又搞了一个
厉害厉害!!!
本帖最后由 shaoge 于 2026-8-9 22:38 编辑
# -*- coding: utf-8 -*-
"""
注册码计算工具
Python 3.9
GUI: Tkinter
与 VBA RegCore 中 GenCode 算法对应。
算法:
机器码:
UCase(Left(MD5(CPU + BoardSerial + "kwzs2026"), 16))
注册码:
UCase(MD5(机器码 + 学校名称UTF8Hex + YYMMDD + 天数)) + YYMMDD + 天数
"""
import hashlib
import tkinter as tk
from tkinter import ttk, messagebox
from datetime import datetime
SALT = "kwzs2026"
def md5(text: str) -> str:
"""计算 UTF-8 字符串 MD5"""
return hashlib.md5(text.encode("utf-8")).hexdigest()
def string_to_utf8_hex(text: str) -> str:
"""
对应 VBA:
StringToUTF8Hex()
中文按照 UTF-8 编码后转换为小写 Hex。
"""
return text.encode("utf-8").hex()
def normalize_date(date_text: str) -> str:
"""
将日期转换成 VBA 所要求的 6 位 YYMMDD。
支持:
2026-08-09
2026/08/09
2026.08.09
260809
"""
date_text = date_text.strip()
if len(date_text) == 6 and date_text.isdigit():
# 已经是 YYMMDD
datetime.strptime(date_text, "%y%m%d")
return date_text
for fmt in ("%Y-%m-%d", "%Y/%m/%d", "%Y.%m.%d"):
try:
dt = datetime.strptime(date_text, fmt)
return dt.strftime("%y%m%d")
except ValueError:
pass
raise ValueError("注册日期格式错误,请使用 YYYY-MM-DD,例如 2026-08-09")
def normalize_days(days_text: str) -> str:
"""
对应 VBA:
ts = Right("0000" & Trim(ts), 4)
"""
days_text = days_text.strip()
if not days_text.isdigit():
raise ValueError("授权天数必须是数字")
days = int(days_text)
if days < 0 or days > 9999:
raise ValueError("授权天数必须在 0 ~ 9999 之间")
return f"{days:04d}"
def generate_code(machine_code: str,
school_name: str,
register_date: str,
days: str) -> str:
"""
对应 VBA GenCode()
"""
machine_code = machine_code.strip().upper()
school_name = school_name.strip()
if not machine_code:
raise ValueError("机器码不能为空")
if not school_name:
raise ValueError("学校名称不能为空")
rq = normalize_date(register_date)
ts = normalize_days(days)
school_hex = string_to_utf8_hex(school_name)
zcrqjtsa = rq + ts
raw = machine_code + school_hex + zcrqjtsa
digest = hashlib.md5(raw.encode("ascii")).hexdigest().upper()
return digest + zcrqjtsa
def generate_machine_code(cpu_id: str, board_serial: str) -> str:
"""
对应 VBA GetMachineCode()
CPU + 主板序列号 + kwzs2026
→ MD5
→ 前16位
→ 大写
"""
cpu_id = cpu_id.strip() or "UNKNOWN_CPU"
board_serial = board_serial.strip() or "UNKNOWN_BOARD"
raw = cpu_id + board_serial + SALT
digest = hashlib.md5(raw.encode("ascii")).hexdigest()
return digest[:16].upper()
class RegistrationGUI:
def __init__(self, root):
self.root = root
self.root.title("注册码计算工具")
self.root.geometry("650x500")
self.root.resizable(False, False)
self.build_ui()
def build_ui(self):
main = ttk.Frame(self.root, padding=20)
main.pack(fill="both", expand=True)
title = ttk.Label(
main,
text="注册码计算工具",
font=("Microsoft YaHei UI", 18, "bold")
)
title.pack(pady=(0, 20))
# 机器码
ttk.Label(main, text="机器码:").pack(anchor="w")
machine_frame = ttk.Frame(main)
machine_frame.pack(fill="x", pady=(5, 15))
self.machine_var = tk.StringVar()
self.machine_entry = ttk.Entry(
machine_frame,
textvariable=self.machine_var,
font=("Consolas", 11)
)
self.machine_entry.pack(
side="left",
fill="x",
expand=True
)
ttk.Button(
machine_frame,
text="生成机器码",
command=self.generate_machine
).pack(side="left", padx=(8, 0))
# CPU
ttk.Label(main, text="CPU ProcessorId:").pack(anchor="w")
self.cpu_var = tk.StringVar()
ttk.Entry(
main,
textvariable=self.cpu_var
).pack(fill="x", pady=(5, 15))
# 主板
ttk.Label(main, text="主板 SerialNumber:").pack(anchor="w")
self.board_var = tk.StringVar()
ttk.Entry(
main,
textvariable=self.board_var
).pack(fill="x", pady=(5, 15))
# 学校名称
ttk.Label(main, text="学校名称:").pack(anchor="w")
self.school_var = tk.StringVar()
ttk.Entry(
main,
textvariable=self.school_var
).pack(fill="x", pady=(5, 15))
# 日期和天数
date_frame = ttk.Frame(main)
date_frame.pack(fill="x", pady=(0, 15))
ttk.Label(
date_frame,
text="注册日期:"
).pack(side="left")
self.date_var = tk.StringVar(
value=datetime.now().strftime("%Y-%m-%d")
)
ttk.Entry(
date_frame,
textvariable=self.date_var,
width=15
).pack(side="left", padx=(5, 30))
ttk.Label(
date_frame,
text="授权天数:"
).pack(side="left")
self.days_var = tk.StringVar(value="30")
ttk.Entry(
date_frame,
textvariable=self.days_var,
width=10
).pack(side="left", padx=5)
ttk.Label(
date_frame,
text="(9999 = 永久)"
).pack(side="left")
# 生成按钮
ttk.Button(
main,
text="生成注册码",
command=self.generate_registration_code
).pack(pady=10)
# 结果
ttk.Label(
main,
text="注册码:"
).pack(anchor="w", pady=(10, 5))
result_frame = ttk.Frame(main)
result_frame.pack(fill="x")
self.result_var = tk.StringVar()
self.result_entry = ttk.Entry(
result_frame,
textvariable=self.result_var,
font=("Consolas", 11)
)
self.result_entry.pack(
side="left",
fill="x",
expand=True
)
ttk.Button(
result_frame,
text="复制",
command=self.copy_code
).pack(side="left", padx=(8, 0))
# 状态
self.status_var = tk.StringVar(
value="就绪"
)
ttk.Label(
main,
textvariable=self.status_var
).pack(anchor="w", pady=(15, 0))
def generate_machine(self):
try:
cpu = self.cpu_var.get()
board = self.board_var.get()
if not cpu:
messagebox.showwarning(
"提示",
"请输入 CPU ProcessorId"
)
return
if not board:
messagebox.showwarning(
"提示",
"请输入主板 SerialNumber"
)
return
code = generate_machine_code(
cpu,
board
)
self.machine_var.set(code)
self.status_var.set(
"机器码生成成功"
)
except Exception as e:
messagebox.showerror(
"错误",
str(e)
)
def generate_registration_code(self):
try:
machine = self.machine_var.get()
school = self.school_var.get()
date_text = self.date_var.get()
days = self.days_var.get()
code = generate_code(
machine,
school,
date_text,
days
)
self.result_var.set(code)
self.status_var.set(
"注册码生成成功"
)
self.result_entry.select_range(
0,
tk.END
)
except Exception as e:
messagebox.showerror(
"生成失败",
str(e)
)
def copy_code(self):
code = self.result_var.get()
if not code:
messagebox.showwarning(
"提示",
"当前没有注册码"
)
return
self.root.clipboard_clear()
self.root.clipboard_append(code)
self.root.update()
self.status_var.set(
"注册码已复制到剪贴板"
)
def main():
root = tk.Tk()
RegistrationGUI(root)
root.mainloop()
if __name__ == "__main__":
main()