使用RNGCryptoServiceProvider类创建唯一的最多8位数字符串,再在前面拼接上年月日时分秒产生的字符串,最大限度的保证生成的字符串是唯一的。
大家也可以根据自己的需求修改,日期可以取值到毫秒,这样更能保证生成的字符串是唯一的。
private static string GetUniqueKey() { int maxSize = 8; int minSize = 5; char[] chars = new char[62]; string a; a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; chars = a.ToCharArray(); int size = maxSize; byte[] data = new byte[1]; RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider(); crypto.GetNonZeroBytes(data); size = maxSize; data = new byte[size]; crypto.GetNonZeroBytes(data); StringBuilder result = new StringBuilder(size); foreach (byte b in data) { result.Append(chars[b % (chars.Length - 1)]); } return result.ToString(); }
然后调用方法,如下做了演示,每次产生的结果都不一样
for (int i = 0; i < 10; i++) { string str = string.Format("{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), GetUniqueKey()); Console.WriteLine(str); } Console.ReadKey();
问题内容: 假设我想使以下内容可重复使用: 我可能会做这样的事情: 使用字符串文字,这很容易。但是,如果我想对正则表达式更加棘手,该怎么办?例如,说我要替换, 而是 。本能地,我会尝试通过以下方式扩展上述内容: 这似乎不起作用。我的猜测是它认为是字符串文字,而不是代表字符串的变量。是否可以使用字符串变量即时创建JavaScript正则表达式?如果可能的话,这样的事情会很棒: 问题答案: 还有哪里是
问题内容: 我创建了以下方法,以便创建唯一的随机数。(此唯一值属于树的节点): 但这并不会创建唯一的数字,并且我的列表中仍然有重复的数字。喜欢 : 问题答案: 问题是,如果它发现重复的数字,您不会在检查函数中停止for循环。循环继续进行,b可以变回true。 例如,您应该做的是:
问题内容: 我想创建一个包含唯一字符串的数组。我怎样才能做到这一点? 问题答案: 如果要收集唯一元素,则为Set数据类型。Go没有集合数据类型,但是您可以使用来充当集合。 对于“好的”集合,请使用具有值类型(带有值)的映射并利用零值。对于内存占用最小的集合,请使用具有值类型的映射,因为类型的值不占用内存;并使用逗号分隔的习惯用法来判断值是否在集合/映射中。 这是set的“不错”版本的样子。代替切片
问题内容: 如标题所示,我需要创建一个随机的,长17个字符的ID。类似于“ ”。字母和数字的顺序也是随机的。我想创建一个由字母AZ和一个随机为的’check’变量组成的数组。然后循环 但是我觉得有一种更简单的方法可以做到这一点。在那儿? 问题答案: 在这里您可以使用我的方法生成随机字符串 上面的方法从我的书包中用来生成一个用于登录目的的盐字符串。
我找不到答案。如果我用Base64编码一个字符串,那么基于该字符串的编码输出会是唯一的吗?我问这个问题是因为我想创建一个包含用户信息的令牌,所以我需要确保输出是唯一的,这取决于信息。 例如,如果我编码“UnqUserId:987654321 Timestamp:01/02/03”,这将是唯一的,所以无论我把它放在什么其他用户ID中,都不会发生冲突?
问题内容: 我需要在Java中创建一个时间戳(以毫秒为单位),以确保在特定的VM实例中是唯一的。即需要某种方式来限制System.currentTimeMillis()的吞吐量,以便它每毫秒最多返回一个结果。关于如何实施的任何想法? 问题答案: 这样可以使时间尽可能接近当前时间,而不重复。 避免每毫秒限制一个id的一种方法是使用微秒级的时间戳。例如,将currentTimeMS乘以1000。这将允