首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为批量生产的产品生成唯一的序列号

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

Stack Overflow用户
提问于 2014-12-26 02:06:01
回答 2查看 2.7K关注 0票数 0

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

我将大量生产产品,从现在起我想我将生产50000台以上的产品。当这些单位被制造和准备好的时候,我必须在派遣之前测试他们,在什么时候,我也想给他们每个人一个唯一的ID。

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

但我的问题是,请看下面的说明,如果我的同一个应用程序同时运行在3个(或更多)不同的跳汰机上,同时并行运行,我如何确保这些系统生成的数字是,而不是彼此之间的

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

如果他们任何时候都是平等的任何机会,我将陷入巨大的麻烦跟踪他们,一旦他们出来。

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

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

请帮帮我!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-26 02:57:35

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

票数 2
EN

Stack Overflow用户

发布于 2014-12-26 04:10:44

我在一个类似的情况和解决了的帮助下,集中的“生成器”,一个存储过程在SQL中。

表结构:

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
    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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27652204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档