c#生成14位不重复订单号
时间: 2024-10-08 13:11:46 浏览: 6
在 C# 中生成一个14位不重复的订单号,通常可以结合时间戳、随机数以及一些固定的标识符。下面是一个简单的示例,这里假设我们已经有一个存储历史订单号的数据库表:
```csharp
using System;
using System.Data.SqlClient;
using System.Linq;
public class OrderGenerator
{
private const string TableName = "OrderHistory";
private const int MaxValue = (int)DateTime.UtcNow.Ticks / TimeSpan.TicksPerMillisecond; // 使用当前时间作为基础,保证唯一
public string GenerateUniqueOrderId()
{
var orderId = Guid.NewGuid().ToString("N"); // 使用Guid作为基本值,保证全局唯一
int timestampPart = Convert.ToInt32(orderId.Substring(0, 13)); // 提取时间部分
using (var connection = new SqlConnection("your_connection_string_here")) // 替换为实际连接字符串
{
connection.Open();
string query = $"SELECT COUNT(*) FROM {TableName} WHERE Timestamp > {timestampPart}";
var count = connection.ExecuteScalar<int>(query);
if (count == 0)
{
return orderId;
}
else
{
orderId = GenerateNewOrderIdIfDuplicate(timestampPart);
return orderId;
}
}
}
private string GenerateNewOrderIdIfDuplicate(int timestampPart)
{
// 如果时间戳部分已存在记录,则递增直到找到唯一的组合
for (int i = 1; ; i++)
{
orderId = $"{orderId.Substring(1)}{i}";
query = $"SELECT COUNT(*) FROM {TableName} WHERE Timestamp = {timestampPart}{orderId.Substring(13)}";
int duplicateCount = connection.ExecuteScalar<int>(query);
if (duplicateCount == 0)
{
return orderId;
}
}
}
}
```
这个类首先尝试生成一个新的 GUID,然后检查其时间戳部分是否在历史记录中已存在。如果不存在,就直接返回;如果存在,它会递增数字并再次查询,直到找到一个未使用的组合。