为批量生产的产品生成唯一的序列号

时间:2014-12-26 02:06:01

标签: c# python uniqueidentifier unique-key

我需要帮助了解如何解决为批量生产的产品生成唯一序列号或UID的问题。

我将大量生产产品,截至目前我认为我将生产> 50000台。制造和准备好这些装置后,我必须在调度之前对它们进行测试,在这个时间点我还要给每个装置一个唯一的ID。

我正在考虑编写一个应用程序来生成 128位唯一编号生成器应用程序并要求测试人员在他们的夹具上运行它,生成ID,分配ID然后进行测试。

但我的问题是,请看下面的插图,如果我的同一个应用程序同时运行3个(或更多)不同的夹具同时,我该如何确保这些系统产生的数字从不彼此相等?

如何以编程方式确保 Unique Serial#1!= Unique Serial#2!= Unique Serial#3

如果他们在任何时候都是平等的,那么一旦他们离开,我将很难跟踪他们。

有一些硬件方法,例如使用Atmel或Maxim的UID芯片/ EEPROM,但它们会增加成本。我希望在软件层面解决这个问题,并将硬件方法作为最后的手段。

我发现测试夹具能够运行 C# Python 应用程序。

请帮忙!

Illustration of Unique Serial # Generator application running on three different test jigs.

2 个答案:

答案 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

它允许您为应用程序和系统创建序列号,但您可以对其进行修改以满足特定需求。