C# - 将字符串的哈希值创建为特定范围

时间:2016-08-31 10:08:03

标签: c# hash colors

我正在尝试实现一种随机颜色生成器。

我打算做的是创建一个字符串哈希(员工姓名)来生成一个十六进制值(#0到#FFFFFF),从而使该员工始终对应相同的颜色。

有人有办法做到这一点吗?

先谢谢

修改

            MD5 hasher = MD5.Create();
            var hashed = hasher.ComputeHash(Encoding.UTF8.GetBytes(r.Employee.Name));
            var intColor = BitConverter.ToInt32(hashed, 0);
            color = intColor.ToString("X");

这就是我到目前为止的情况,但是它似乎存在问题,因为它显示了所有内容的标准蓝色

2 个答案:

答案 0 :(得分:3)

由于#0#FFFFFF范围 3个字节,我们可以像往常一样计算哈希值,然后取前三个字节:

public static String md5_hash3(String value) {
  using (var hash = MD5.Create()) {
    return String.Concat(hash
      .ComputeHash(Encoding.UTF8.GetBytes(value))
      .Take(3)
      .Select(item => item.ToString("X2")));
  }
}

...

 String result = md5_hash3(r.Employee.Name); 

答案 1 :(得分:0)

您可以尝试这样做:

int maxValue = int.Parse("FFFFFF", System.Globalization.NumberStyles.HexNumber);
var intColor = BitConverter.ToInt32(hashed, 0);
intColor = intColor % maxValue;
var color = intColor.ToString("X");

它也绝对不能保证你的颜色很好。