2014-12-26 44 views
0

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

我将大量生产产品,截至目前我认为我将制造> 50000个单位。当这些装置制造好并准备就绪时,我必须在派遣之前对它们进行测试,并且在那个时间点我还要给每个人一个唯一的ID。

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

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

如何以编程方式确保唯一序列号1!=唯一序列号2!=唯一序列号3

如果他们永远都是平等的,那么一旦他们外出,我会很难追踪他们。

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

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

请帮忙!

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

+2

想法A:每台机器上的程序是否将UID插入全局UID数据库,并在生成新UID时检查该数据库? –

+0

无论使用哪种配方,都要确保在每个批次中允许三个夹具具有足够的唯一ID,如果您开始进一步生产,请再次执行相同的操作 –

+1

想法B:将每个生成的UID预先添加/追加每个生成的机器自己的唯一序列号? –

回答

2

你需要的是一个GUID生成器。由网络ID和时间组成的GUID被认为是唯一的。重复的可能性不大。

+1

C#有一个内建的Guid类。你可以调用'Guid.NewGuid()'来获得一个随机的Guid。请参阅:http://msdn.microsoft.com/en-us/library/system.guid%28v=vs.110%29.aspx – shortspider

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 

它可以让你的应用程序和系统创建顺序编号,但可以修改它来满足特定的需要。