c# -在特定范围内创建字符串到整数的散列
本文关键字:整数 字符串 创建 范围内 | 更新日期: 2023-09-27 18:04:48
我正在尝试实现一种形式的随机颜色生成器。
我打算做的是创建一个字符串(员工的名字)的哈希值来生成一个十六进制值(#0到#FFFFFF),因此导致该员工始终对应于相同的颜色。
有没有人有可行的方法?
Thanks in Advance
编辑
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
到#FFFFFF
的范围是3个字节,我们可以像往常一样计算哈希,然后取前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);
您可以尝试这样做:
int maxValue = int.Parse("FFFFFF", System.Globalization.NumberStyles.HexNumber);
var intColor = BitConverter.ToInt32(hashed, 0);
intColor = intColor % maxValue;
var color = intColor.ToString("X");
也不能保证你的颜色好看。