【问题标题】:Mapping an MD5 hash to a set of integers将 MD5 哈希映射到一组整数
【发布时间】:2012-03-23 10:11:45
【问题描述】:

我想为我系统上的每个用户显示一张随机图像。但是,特定用户每次都必须始终收到相同的随机图像,因此如果需要,我必须能够生成图像 id。

我正在考虑使用用户名的 MD5 来生成一个数字。我的系统正在使用 JavaScript,我正在使用 jQuery 库。

例如,如果随机图像有 4 个变体,我想按原样传入名称并接收一个整数。

$image_id = getImage(name);

注意:概率不需要是准确的。 IE。如果其中一张图片比其他图片更受欢迎,我并不关心。

【问题讨论】:

    标签: jquery image random md5


    【解决方案1】:

    简单地将字符串映射到整数函数

    好的,我写了自己的小函数。希望它对某人有用。

    该函数将字符串中每个字符的字符代码相加,然后使用模数将数字减少到指定的最大值内。似乎很有效。

    注意它在数学上不是随机的,但它非常适合从字符串中选择可重复的随机选项。

    function getMappedCode(string, max_number_desired)
    {
      var char_code_total = 0;  
      for(var i = 0; i < string.length; i++) {
        char_code_total += string.charCodeAt(i);  
      }  
      return char_code_total % max_number_desired;
    }
    
    var mapped_code = getMappedCode("tom finney", 10);
    
    alert(mapped_code);
    

    【讨论】:

      【解决方案2】:

      你需要的是一个 JavaScript 随机函数,它也接受种子。然后,您可以制作用户名的数字版本(或使用他们的 ID #),并将其作为种子传递给您的新函数。

      这里发布了一种方法:Seedable JavaScript random number generator

      一旦你这样做了,你每次都会得到相同的随机数。从那里,您可以选择该随机数从图像数组中选择索引。

      【讨论】:

      • 没有比这更简单的方法了吗?其中一些函数背后的数学似乎没有必要。
      • @JonWinstanley,嗯,当然,但你暗示你想要随机,所以是的,所有这些都是必要的。
      • 我最终制作了自己的版本。它也有点工作。这很好。
      猜你喜欢
      • 2012-08-05
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2017-10-09
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多