我需要帮助理解如何解决这个问题,为批量生产的产品生成唯一的序列号或UID。
我将大量生产产品,从现在起我想我将生产50000台以上的产品。当这些单位被制造和准备好的时候,我必须在派遣之前测试他们,在什么时候,我也想给他们每个人一个唯一的ID。
我正在考虑编写一个应用程序来生成一个128位唯一的数字生成器应用程序,并要求测试人员在他们的夹具上运行它,生成一个ID,分配ID,然后进行测试。
但我的问题是,请看下面的说明,如果我的同一个应用程序同时运行在3个(或更多)不同的跳汰机上,同时并行运行,我如何确保这些系统生成的数字是,而不是彼此之间的?
如何以编程方式确保唯一序列#1 !=唯一序列#2 !=唯一序列#3
如果他们任何时候都是平等的任何机会,我将陷入巨大的麻烦跟踪他们,一旦他们出来。
有一些硬件方法,例如使用来自Atmel或Maxim的UID芯片/EEPROM,但它们会增加成本。我希望在软件层面解决这一问题,并将硬件方法作为最后手段。
我发现这些测试夹具能够运行C#或Python应用程序。
请帮帮我!

发布于 2014-12-26 02:57:35
你需要的是一个GUID发生器。由网络ID和时间组成的GUID被认为是唯一的。重复的可能性是微不足道的。
发布于 2014-12-26 04:10:44
我在一个类似的情况和解决了的帮助下,集中的“生成器”,一个存储过程在SQL中。
表结构:
CREATE TABLE [dbo].[UniqueKeys](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[App] [nvarchar](100) NOT NULL,
[System] [nvarchar](100) NOT NULL,
[Key] [bigint] NOT NULL
) ON [PRIMARY]下面是SP的代码:
CREATE PROCEDURE [dbo].[GetUniqueKeyTV]
@app VARCHAR(100) ,
@sys VARCHAR(100) ,
@retVal BIGINT OUT
AS
BEGIN
DECLARE @T TABLE([Key] BIGINT);
SET NOCOUNT ON
MERGE INTO dbo.UniqueKeys WITH (TABLOCK) AS Target
USING ( VALUES
( @app ,
@sys ,
1
) ) AS Source ( [App], [System], [Key] )
ON ( Target.App = Source.App
AND Target.[System] = Source.[System]
)
WHEN MATCHED
THEN UPDATE
SET Target.[Key] = Target.[Key] + 1
WHEN NOT MATCHED BY TARGET
THEN
INSERT (
[App] ,
[System] ,
[Key]
) VALUES
( Source.[App] ,
Source.[System] ,
Source.[Key]
) OUTPUT
inserted.[Key] INTO @T;
SELECT @retVal = [Key]
FROM @T
SET NOCOUNT OFF
END
GO它允许您为应用程序和系统创建序列号,但您可以对其进行修改,以适应特定的需求。
https://stackoverflow.com/questions/27652204
复制相似问题