我正在尝试实现一种随机颜色生成器。
我打算做的是创建一个字符串哈希(员工姓名)来生成一个十六进制值(#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");
这就是我到目前为止的情况,但是它似乎存在问题,因为它显示了所有内容的标准蓝色
答案 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");
它也绝对不能保证你的颜色很好。