将字符串一致地转换为 0 到 100 之间的随机百分比



对于新功能的软推出,我希望保存功能标志的服务器返回一个百分比数字,然后让客户端找出它在百分比的哪一边。 我想使用 user-id 来一致地做出此选择,以便单个用户始终看到标志的同一侧。

我已经走到了尽头

(crypto.createHash('md5').update(userID).digest('hex').charCodeAt(0)

它对 ID(这将是一些大字符串(进行哈希处理,然后获取哈希的第一个字符并将其转换为整数 ID。 不幸的是,这个数字似乎不是一个随机分布,所以即使我移动并乘以它总是在 0 到 100 之间,它似乎也不是随机均匀的。以下是我运行的一些随机字符串的哈希值:

checking  25
15.2
checking  26
96.89999999999999
checking  27
98.8
checking  28
13.299999999999999
checking  29
15.2
checking  30
102.6
checking  31
15.2
checking  32
7.6
checking  33
102.6
checking  34
15.2
checking  35
102.6
checking  36
15.2
checking  37
7.6
checking  38
96.89999999999999
checking  39
96.89999999999999
checking  40
7.6
checking  41
100.69999999999999
checking  42
13.299999999999999
checking  43
96.89999999999999
checking  44
93.1
checking  45
96.89999999999999
checking  46
1.9
checking  47
15.2
checking  48

有没有更好的方法来执行此检查,以便创建百分比的随机分布?

我想出了这个,它似乎工作得很好:

parseInt(crypto.createHash('md5').update(flagName+ userID).digest('hex'), 16).toString().substring(4, 6)

这有点疯狂,但似乎效果很好。 ParseInt创建了一个巨大的数字,然后我从小数中抓取一些数字。

checking  D
17
checking  N
23
checking  F
17
checking  J
30
checking  Z
76
checking  L
20
checking  N
23
checking  X
50
checking  L
20
checking  F
17
checking  H
67
checking  U
52
checking  H
67
checking  3
75
checking  8
42
checking  2
00
checking  9
37
checking  3
75
checking  5
19
checking  0
21
checking  1
57
checking  3
75
checking  9
37
checking  4
97
checking  5
19
checking  0
21
checking  d
42
checking  k
27
checking  l
77
checking  z
53
checking  i
59

相关内容

  • 没有找到相关文章

最新更新