我只是想知道通常的方法是生成一个任意长度的随机大小写字母的唯一字符串?生成随机上/下字母的唯一5字符序列?
我的直接想法是使用我使用的编程框架提供的guid生成器,然后将一个众所周知的散列算法应用于guid。
如果是这样的话,我需要研究哪些类型的散列函数?
感谢
我只是想知道通常的方法是生成一个任意长度的随机大小写字母的唯一字符串?生成随机上/下字母的唯一5字符序列?
我的直接想法是使用我使用的编程框架提供的guid生成器,然后将一个众所周知的散列算法应用于guid。
如果是这样的话,我需要研究哪些类型的散列函数?
感谢
创建一个GUID是不是得到一个随机数的好方法,如在GUID并不是所有的数据是随机的。请使用Random
类。例如:然而
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int len = 5;
Random rnd = new Random();
StringBuilder b = new StringBuilder(len);
for (int i = 0; i < len; i++) {
b.Append(chars[rnd.Next(chars.Length)]);
}
string result = b.ToString();
注意,这并不保证代码是独特。为了实现这一点,你必须保存所有以前的代码,并检查那些用于任何新代码的代码。尽管GUID被认为足够不足,但从GUID生成的短散列没有该属性。
'random!= unique'!即使是guid在技术上也不是独一无二的。只有非常非常不可能的是,同一个将会被生产两次。这只是由于guid基本上是非常大的数字(比5个字符多得多*),并且创建它们的算法具有非常好的分布。如果你确实需要保证唯一性,那么你需要“记住”你生成的所有东西,如果你得到了已经生成的东西,就要再次生成。 – Corak
或者更好的是,对于相对较小的范围:生成*所有*可能性,然后随机选择一个并将其从下一次的可能性列表中删除。 – Corak