#ifndef LICENSEDATA_H
|
#define LICENSEDATA_H
|
|
#include <QByteArray>
|
#include <QString>
|
#include <QDate>
|
|
/**
|
* @brief 许可证数据结构 V2(极致紧凑版)
|
*
|
* 二进制格式(大端序):
|
* [0..15] 16B 主板UUID(原始二进制)
|
* [16..23] 8B CPU序列号(原始二进制)
|
* [24] 1B 用户名长度N
|
* [25..24+N] N B 用户名UTF-8数据
|
* [25+N..26+N] 2B 失效日期(距2000-01-01的天数,uint16)
|
* [27+N] 1B 产品号(uint8)
|
* [28+N] 1B 主版本号(uint8)
|
* [29+N] 1B 次版本号(uint8)
|
* [30+N] 1B 激活状态(uint8)
|
*
|
* 总长度 = 31 + N 字节
|
*/
|
struct LicenseData
|
{
|
QByteArray boardUuid; // 16字节二进制UUID
|
QByteArray cpuSerial; // 8字节二进制
|
QString userName; // 用户名
|
QDate expireDate; // 失效日期(仅日期,无时间)
|
quint8 productId; // 产品号
|
quint8 verMajor; // 主版本号
|
quint8 verMinor; // 次版本号
|
quint8 activeState; // 激活状态
|
|
LicenseData();
|
|
QByteArray toBinary() const;
|
bool fromBinary(const QByteArray &data);
|
QString toDebugString() const;
|
|
// 辅助转换
|
static QByteArray uuidStringToBinary(const QString &uuidStr);
|
static QString uuidBinaryToString(const QByteArray &bin);
|
static QByteArray hexStringToBinary(const QString &hexStr);
|
static QString binaryToHexString(const QByteArray &bin);
|
|
private:
|
// 日期基准:2000-01-01,用uint16存天数,范围 2000-01-01 ~ 2182-06-05
|
static constexpr int BASE_YEAR = 2000;
|
static constexpr int BASE_MONTH = 1;
|
static constexpr int BASE_DAY = 1;
|
|
quint16 dateToDays(const QDate &date) const;
|
QDate daysToDate(quint16 days) const;
|
};
|
|
#endif // LICENSEDATA_H
|