我需要帮助了解如何解决为批量生产的产品生成唯一序列号或UID的问题。
我将大量生产产品,截至目前我认为我将生产> 50000台。制造和准备好这些装置后,我必须在调度之前对它们进行测试,在这个时间点我还要给每个装置一个唯一的ID。
我正在考虑编写一个应用程序来生成 128位唯一编号生成器应用程序并要求测试人员在他们的夹具上运行它,生成ID,分配ID然后进行测试。
但我的问题是,请看下面的插图,如果我的同一个应用程序同时运行3个(或更多)不同的夹具同时,我该如何确保这些系统产生的数字从不彼此相等?
如何以编程方式确保 Unique Serial#1!= Unique Serial#2!= Unique Serial#3 ?
如果他们在任何时候都是平等的,那么一旦他们离开,我将很难跟踪他们。
有一些硬件方法,例如使用Atmel或Maxim的UID芯片/ EEPROM,但它们会增加成本。我希望在软件层面解决这个问题,并将硬件方法作为最后的手段。
我发现测试夹具能够运行 C#或 Python 应用程序。
请帮忙!
答案 0 :(得分:2)
您需要的是GUID生成器。由网络ID和时间组成的GUID被认为是唯一的。重复的可能性微不足道。
答案 1 :(得分:0)
我在类似的情况下solved it在集中式“生成器”的帮助下,这是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
它允许您为应用程序和系统创建序列号,但您可以对其进行修改以满足特定需求。