Files
Xuewang365OSNeutral/app/src/main/java/com/xwad/os/manager/DeviceSNManager.java
tongtongstudio ee4c05b438 version:1.1.3
fix:
update:优化支付问题,增加九学王激活逻辑
2025-12-29 09:35:24 +08:00

107 lines
3.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.xwad.os.manager;
import android.text.TextUtils;
import com.tencent.mmkv.MMKV;
import com.xwad.os.config.CommonConfig;
import java.util.Random;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DeviceSNManager {
private static final String SN_KEY = "device_sn";
private static final String PREFIX = "CDSN";
private static final int RANDOM_DIGITS = 9;
private static MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
public DeviceSNManager() {
}
/**
* 获取设备SN如果不存在则创建新的
*/
public static String getDeviceSN() {
String existingSN = mMMKV.decodeString(SN_KEY, "");
// if (!TextUtils.isEmpty(existingSN)) {
return existingSN;
// }
// String newSN = generateNewSN();
// mMMKV.encode(SN_KEY, newSN);
// return newSN;
}
public static void saveDeviceSN(String sn) {
mMMKV.encode(SN_KEY, sn);
}
/**
* 生成新的设备SN
* 格式CDSN202511T923852225
*/
private static String generateNewSN() {
StringBuilder snBuilder = new StringBuilder();
// 添加前缀
snBuilder.append(PREFIX);
// 添加年份月份
String timeYear = formatTimestamp(System.currentTimeMillis());
snBuilder.append(timeYear);
// 添加基于时间戳的9位随机数字
snBuilder.append(generateRandomString(10));
return snBuilder.toString();
}
// 定义可供随机选择的字符池
private static final String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String LETTERS_AND_DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
public static String generateRandomString(int length) {
if (length < 1) {
throw new IllegalArgumentException("Length must be at least 1");
}
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
// 第一位:确保是字母
sb.append(LETTERS.charAt(random.nextInt(LETTERS.length())));
// 剩余位数:字母或数字
for (int i = 1; i < length; i++) {
sb.append(LETTERS_AND_DIGITS.charAt(random.nextInt(LETTERS_AND_DIGITS.length())));
}
return sb.toString();
}
/**
* 删除已存储的SN用于测试或重新生成
*/
public static void clearDeviceSN() {
mMMKV.removeValueForKey(SN_KEY);
}
/**
* 检查是否已存在SN
*/
public static boolean hasDeviceSN() {
return mMMKV.containsKey(SN_KEY) && !TextUtils.isEmpty(mMMKV.decodeString(SN_KEY, ""));
}
public static String formatTimestamp(long timestamp) {
// 创建指定格式的格式化对象,"yyyyMM" 表示6位数字的年份和月份"'T'" 表示字面量字符 T
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM'T'");
Date date = new Date(timestamp);
// 将 Date 对象格式化为字符串
return sdf.format(date);
}
}