如何生成唯一的付款编号?

时间:2018-01-26 18:00:00

标签: c# .net entity-framework paypal

当您通过PayPal付款时,您会收到付款编号(如此PAY-8YW005202J095132TLI5UVIE),我认为此编号是唯一的。
问题是我如何生成这个唯一的id, 我在系统上工作,这个系统将DB中的所有事务保存到Transaction表中,我想生成交易号 我为此付款构建了结构

(year part)(month part)(day in the month part)(*)

(*)部分中的问题我想为每一天生成随机和唯一的数字 我使用C#.Net

处理EF6

3 个答案:

答案 0 :(得分:3)

您可以使用Guid(全局唯一标识符)。试试这个:

var randomPart = Guid.NewGuid().ToString();

另外,您可以控制它的演示文稿,如下所示:

var p = Guid.NewGuid().ToString("N")
    .Substring(0, 5); // note: trimming chars from guid make it less unique

这将创建一个没有短划线和5个字符的字符串。

编辑:另一个选项是base64字符串。你可以尝试这样的事情:

var buffer = new byte[42]; // length is up to you
var random = RNGCryptoServiceProvider.Create();
random.GetBytes(buffer);
var randomPart = Convert.ToBase64String(buffer);

答案 1 :(得分:2)

永远不要使用Random()来创建唯一标识符。其结果不可预测的独特之处。出于某种原因,有一个GUID(全球唯一标识符)对象,这就是原因。

var id = new Guid(); //call the ToString() method on this to get it as a string

那就是说,你有可能获得重复的Guid密钥。这个机会不如有人在太空中投球并在没有瞄准的情况下击中彗星的可能性,但机会就在那里。如果你特别担心这个微小的机会,做一些像这样的伪代码:

var id = new Guid();
while(myGuidArrayThatIGotFromMyDatabase.Contains(id))
{ id = new Guid(); }

如果你因为不断匹配现有数据而最终陷入无限循环,我将不得不要求你挖掘比特币,成为我在拉斯维加斯的官方代表,然后挑选一堆彩票门票给我。

另外,虽然我在上面提到你可以使用.ToString()来获取与GUID等效的字符串,但重要的是要注意Guid(字符串值)不仅作为Guid构造函数存在,而且此外,SQL Server数据库(以及其他一些数据库)都将支持Guid作为表中的列值类型,这可以消除首先使用字符串作为标识符的需要。

答案 2 :(得分:-2)

我认为您可以在C#中使用随机功能。  随机rnd = new Random();  rnd.Next(); //这始终是唯一的,因为值取决于日期和时间,这是不断变化的。 由于随机使用有一些缺点,并且有很多人建议,我正在更新我的答案。

这是另一种可以生成唯一键的方法:DateTime.Now.ToString(“yyMMddHHmmssff”);以下是有关字符串格式的更多详细信息:msdn.microsoft.com/en-us/library/zdtaw1bw.aspx