从用户名生成 rgb 颜色(以可重复的方式)

Generate an rgb color from a user's name (in a repeatable way)

我想根据以下规则为用户的默认头像背景设置一致的颜色:

我正在考虑以下思路:

但我不太清楚该怎么做。有什么建议么?如果我能在不获得任何额外宝石的情况下做到这一点,那将是理想的。我已经使用 MD5 进行一些哈希处理。

注意:这不是安全问题,只是有点好玩,所以如果两个不同的名称偶尔会生成相同的颜色,这无关紧要,但通常情况下很高兴让颜色值尽可能多变。

您可以通过以下方式构建用户名的 MD5 哈希:

require 'digest'

name = 'foo'
digest = Digest::MD5.digest(name)
#=> "\xAC\xBD\x18\xDBL\xC2\xF8\\xED\xEFeO\xCC\xC4\xA4\xD8"

提取前三个 16 位整数:

values = digest.unpack('SSS')
#=> [48556, 56088, 49740]

并将这些 0..65535 值映射到 0..200:

values.map { |i| i * 201 / 0x10000 }
#=> [148, 172, 152]