当前位置: 首页 > news >正文

EasyClick 生成唯一设备码

EasyClick 生成唯一设备码

  • EasyClick 生成唯一设备码

EasyClick 生成唯一设备码

官方的几个函数无法正常获取设备码

device.tcDeviceId 三方统计唯一设备标识
device.getIMEI 获取IMEI

需要自行实现设备码生成过程,然后自行存储验证

/** Copyright(c) 2025,*    项目名称:xxx*    文件名称:createUUID.js*    创建时间:2025/3/7 16:10*    作者:laogui */// 时间戳工具模块(增强版)
let LGTimestampUtils = {/*** 时间戳转Base36(带前导零)* @param {string} timestampStr - 13位时间戳字符串* @returns {string} 8位Base36字符串*/toBase36WithPadding: function (timestampStr) {// 输入校验if (!/^\d{13}$/.test(timestampStr)) {throw new Error('Invalid 13-digit timestamp');}// 直接使用 Number 处理(安全范围内)const num = parseInt(timestampStr, 10);return num.toString(36).padStart(8, '0').slice(-8).toLowerCase();},/*** 生成高熵随机字符串* @param {number} length - 需要生成的字符长度* @returns {string} 随机字符串*/generateHighEntropyRandom: function (length) {const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';const randomBytes = this._getRandomBytes(length);let result = '';for (let j = 0; j < randomBytes.length; j++) {result += chars[randomBytes[j] % chars.length];}return result;},// 私有方法:获取随机字节_getRandomBytes: function (length) {if (typeof crypto !== 'undefined' && crypto.getRandomValues) {const buf = new Uint8Array(length);crypto.getRandomValues(buf);return buf;} else {const arr = [];for (let i = 0; i < length; i++) {arr.push(Math.floor(Math.random() * 256));}return arr;}},/*** 格式化为可读时间* @param {number} timestamp - 13位时间戳* @returns {string} YYYY-MM-DD HH:mm:ss.SSS*/formatReadableTime: function (timestamp) {const date = new Date(timestamp);const pad = (n, len) => n.toString().padStart(len, '0');return `${date.getFullYear()}-${pad(date.getMonth() + 1, 2)}-${pad(date.getDate(), 2)} ` +`${pad(date.getHours(), 2)}:${pad(date.getMinutes(), 2)}:${pad(date.getSeconds(), 2)}.` +pad(date.getMilliseconds(), 3);}
};// 主业务逻辑(增强版)
let LGIdGenerator = {/*** 生成唯一标识符* @param {string} javaTimestamp - Java生成的13位时间戳字符串* @returns {string} 32位ID(8位Base36时间戳 + 24位随机数)*/createUniqueIdentifier: function (javaTimestamp) {return LGTimestampUtils.toBase36WithPadding(javaTimestamp) +LGTimestampUtils.generateHighEntropyRandom(24);},/*** 解码时间戳* @param {string} encodedId - 32位ID* @returns {number} 原始13位时间戳*/decodeEmbeddedTimestamp: function (encodedId) {const base36Str = encodedId.substring(0, 8);return parseInt(base36Str, 36);},/*** 解码并格式化时间* @param {string} encodedId - 32位ID* @returns {string} 格式化后的时间字符串*/decodeAndFormat: function (encodedId) {return LGTimestampUtils.formatReadableTime(this.decodeEmbeddedTimestamp(encodedId));}
};// 使用示例 生成唯一uuid
const uniqueId = LGIdGenerator.createUniqueIdentifier(Date.now().toString());
console.log("Generated ID:", uniqueId);
// 解码生成时间
console.log("Decoded Timestamp:", LGIdGenerator.decodeEmbeddedTimestamp(uniqueId));
// 解码并格式化时间
console.log("Formatted Time:", LGIdGenerator.decodeAndFormat(uniqueId));
http://www.dtcms.com/a/350136.html

相关文章:

  • SP95N65CTO:一款高性能650V SiC MOSFET的全面解析
  • 数据赋能(409)——大数据——合规性和伦理性原则
  • 强化学习基础总结
  • 《分布式系统跨服务数据一致性Bug深度复盘:从现象到本质的排查与破局》
  • 2025年优化算法:雪雁优化算法(Snow Geese Algorithm,SGA)
  • 2025 JVM 并发革命:虚拟线程与结构化并发,引领性能飞跃(35)
  • 京东前端社招面经
  • Pandas 高效数据处理:apply、向量化与分组
  • Qt——多媒体(音频、视频播放)
  • 艾利特石油管道巡检机器人:工业安全的智能守护者
  • 系统数据库
  • WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元
  • 2025年9月计算机二级C++语言程序设计——选择题打卡Day6
  • 神经网络模型搭建及手写数字识别案例
  • 关于“程序=数据结构+算法”的深层认识
  • Java图形图像处理【双缓冲技术与游戏】【九】
  • Java全栈开发面试实战:从基础到微服务的深度解析
  • IDEA2022开启新版UI
  • 系统架构设计师备考第4天——计算机软件概述操作系统
  • Aligning Effective Tokens with Video Anomaly in Large Language Models
  • 储能防逆流:智能守护电网稳定的核心技术
  • 大数据毕业设计选题推荐-基于大数据的餐饮服务许可证数据可视化分析系统-Spark-Hadoop-Bigdata
  • 阿里云OSS文件上传_对象存储服务全流程
  • Android横竖屏切换的“数据保卫战”:如何优雅地保存和恢复表单数据
  • 用 python 开发一个可调用工具的 AI Agent,实现电脑配置专业评价_python ai agent
  • 常见前端性能优化讲解
  • 在分布式计算区域中通过VPC搭建私有网络
  • Ansible 任务控制与事实管理指南:从事实收集到任务流程掌控
  • Hadoop(四)
  • 【GPT入门】第59课 大模型内存计算指南:7B/8B/70B 模型在 32/16/8/4bit 精度下的内存需求测算