当前位置: 首页 > 编程笔记 >

C#利用时间和随即字符串创建唯一的订单编号

苏凯
2023-03-14
本文向大家介绍C#利用时间和随即字符串创建唯一的订单编号,包括了C#利用时间和随即字符串创建唯一的订单编号的使用技巧和注意事项,需要的朋友参考一下

使用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。这将允