当前位置:首页 > JavaScript

js可以实现一机一码

2026-01-31 11:22:41JavaScript

实现一机一码的方案

在JavaScript中实现“一机一码”(即每台设备生成唯一标识)通常需要结合设备硬件或浏览器环境的唯一信息。以下是几种常见方法:

基于浏览器指纹生成

通过收集浏览器和设备的多种信息(如用户代理、屏幕分辨率、插件列表等)生成唯一指纹:

js可以实现一机一码

function generateFingerprint() {
  const canvas = document.createElement('canvas');
  const ctx = canvas.getContext('2d');
  ctx.textBaseline = 'top';
  ctx.font = '14px Arial';
  ctx.fillStyle = '#f60';
  ctx.fillRect(125, 1, 62, 20);
  ctx.fillStyle = '#069';
  ctx.fillText('fingerprint', 2, 15);
  ctx.fillStyle = 'rgba(102, 204, 0, 0.7)';
  ctx.fillText('fingerprint', 4, 17);

  const fingerprint = canvas.toDataURL();
  return hashString(fingerprint);
}

function hashString(str) {
  let hash = 0;
  for (let i = 0; i < str.length; i++) {
    hash = ((hash << 5) - hash) + str.charCodeAt(i);
    hash |= 0;
  }
  return hash.toString(36);
}

使用Web Storage持久化存储

将生成的标识存储在localStorage中,确保浏览器关闭后仍能保持:

js可以实现一机一码

function getDeviceId() {
  let deviceId = localStorage.getItem('deviceId');
  if (!deviceId) {
    deviceId = generateFingerprint();
    localStorage.setItem('deviceId', deviceId);
  }
  return deviceId;
}

结合硬件信息(需要用户授权)

通过Web API获取更多硬件信息增强唯一性:

async function getEnhancedDeviceId() {
  const hardwareConcurrency = navigator.hardwareConcurrency || '';
  const deviceMemory = navigator.deviceMemory || '';
  const platform = navigator.platform || '';

  const mediaDevices = await navigator.mediaDevices.enumerateDevices();
  const audioDevices = mediaDevices.filter(d => d.kind === 'audioinput');

  const baseString = `${hardwareConcurrency}-${deviceMemory}-${platform}-${audioDevices.length}`;
  return hashString(baseString);
}

注意事项

浏览器指纹可能因用户设置或软件更新而变化,无法保证绝对唯一性。移动端应用可通过原生能力获取更稳定的设备标识(如IMEI),但需要相应权限。

对于高安全性要求的场景,建议结合后端验证和定期刷新机制,避免单纯依赖前端生成的标识。

标签: 可以实现js
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Paren…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = documen…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个…