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
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
|
|
}
|
|
|