You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

35 lines
1.5 KiB

// Package devcode 设备码解析:从一条「设备码」反推出它属于哪个产品(PID)。
//
// **设备码就是 MAC**(2026-09-02 起)。此前还有一种 20 字符的 license 串形态,
// 与 MAC 并存指向同一台设备;那套已整体移除(utils/license 包已删除),
// 库里的存量 license 码也已就地改写成对应的 MAC。
//
// MAC 的前 2 字节就是 PID(见 utils/mac),所以「这台设备属于哪个产品」不需要查库。
//
// ⚠️ 存在的理由是「别再写 `解析失败就回退写死 pid` 那种代码」:回退到一个固定 PID
// 会静默去查错误的 license_<pid> 分表,解绑/重置看起来成功、实际什么都没改。
// 解不出就返回错误,让调用方报出来。
package devcode
import (
"strings"
"yunyan/utils/mac"
)
// ProductID 从设备码(MAC)解析出 PID。
func ProductID(code string) (uint16, error) {
pid, _, err := mac.Parse(strings.TrimSpace(code))
return pid, err
}
// NormalizeMac 把用户输入的 MAC 规范成落库形态:大写、冒号分隔。
// 解析不了则返回 ok=false —— MAC 现在是授权码分表的主键,也是绑定时精确匹配的键,
// 格式不一致会让同一台设备存成两行、也会让按 MAC 反查绑定的路径查不到。
func NormalizeMac(s string) (string, bool) {
pid, serial, err := mac.Parse(strings.TrimSpace(s))
if err != nil {
return "", false
}
return mac.Generate(pid, serial), true
}