Javascript 如何输入一个数字并输出一个随机数,如果在不同的机器上给定相同的ID,如何保持输出相同

Javascript 如何输入一个数字并输出一个随机数,如果在不同的机器上给定相同的ID,如何保持输出相同,javascript,random,colors,Javascript,Random,Colors,目前,我正在使用scriptish编写一个小脚本,它接收一个用户ID(目前在我们的论坛上,我们的用户ID为1到63),并使用以下函数使用随机颜色对其进行着色: function setNickColor(nick) var spans = nick.getElementsByTagName('span'); var uid = nick.getAttribute('hovercard-id'); if (colors[uid] == null) storeColor(uid, Mat

目前,我正在使用scriptish编写一个小脚本,它接收一个用户ID(目前在我们的论坛上,我们的用户ID为1到63),并使用以下函数使用随机颜色对其进行着色:

function setNickColor(nick) 
var spans = nick.getElementsByTagName('span');
var uid = nick.getAttribute('hovercard-id');

if (colors[uid] == null)
    storeColor(uid, Math.random().toString(15).substring(2,8));
这将为安装脚本的每个人分别生成一个24位的随机颜色(对于rgb颜色)。我希望每个ID生成一个固定的随机颜色。我不知道如何将ID放入函数中,使其仍然是随机的,但仍然生成随机颜色

我看过seeds,但有点难以理解它们的作用,因为我对javascript非常陌生。“固定”和“随机”是两个截然相反的东西。忘记随机。根据你的描述,你真的只想要“固定”


现在来看解决方案:对ID进行任意哈希,然后将其减少到3个字节,以形成与该ID对应的RGB值。

在我看来,解决方案有两个主要部分:

  • 为用户ID生成随机颜色
  • 在后续请求中将此随机颜色与用户ID关联
  • 由于您已经完成了第一个操作,因此将保留第二个操作。以下是一些选项,具体取决于后端系统为您提供的灵活性:

  • 您可以编写一个Web服务,从javascript函数调用它。您调用的负载将是用户ID和生成的颜色,您的Web服务将存储在后端数据库中。然后,您的模板将检查每个用户,如果没有设置颜色,则生成一个随机的颜色并进行设置(并刷新页面,用于初始设置)

  • 您可以在浏览器中设置表示生成的颜色的cookie,然后加载此cookie并使用它更改显示的用户ID。其缺点是它依赖于浏览器(在同一台机器上,在两个浏览器上,同一用户ID可以有两种不同的颜色),如果该人清除了他们的饼干,颜色将重新生成

  • 第三个选项是Oleg建议的-创建一些用户ID的散列(这是一个单向算法,因此在相同的输入下,可以保证得到相同的结果),然后将此散列的一个组件作为颜色的基础。好处是可以避免cookie和Web服务问题;但挑战是您需要使颜色生成器更“随机”,因为最终可能会得到视觉上不明显的颜色


  • 固定和随机不在一起。谢谢你的回答。我一直在谷歌搜索,似乎所有的哈希函数对于我的需要都过于复杂。你特别推荐任何哈希函数吗(据我所知,没有原生哈希函数?)提示:搜索“校验和”"同样。在这种情况下,它与哈希相同。这个关于快速校验和的问题有链接到CRC32的JS实现,这对于您的目的应该足够了:我觉得Oleg建议的哈希函数是目前最好的解决方案。但是,据我所知,javascript中没有本机哈希函数?每次我在google上blic哈希代码,对于我的需求来说太复杂了,结果比我原来的代码要大。你有什么建议来缓解这个问题吗?你的意思是除了#1和#2?:)不幸的是,我几乎没有使用Web服务的经验。这实际上是我的最终计划(用户可以在发送给heroku的浏览器中设置他们的颜色),但现在我只想在扩展之前坚持使用一个简单的解决方案,因为我的javascript体验是在3小时前开始的。最简单的选项是#2,使用javascript设置cookie。不幸的是,代码不适合我自己,它正在被其他大约10个人使用,我希望它对每个人都是一样的