如何生成12位数的唯一数字?

Dan*_*ard 1 c# unique uniqueidentifier

我正在开发一个将原始数据发送到zebra打印机并打印出条形码的应用程序.由于每个项目都有自己独特的条形码,我需要定义一个自动生成12位数字的唯一数字的变量.

看例子:

printBar prnt = new printBar("123456789012");
Run Code Online (Sandbox Code Playgroud)

无论如何定义一个double变量并将其传递给一个返回uniqely 12位数的函数并将其传递给printBar类?但是如何确保每次访问它都会返回一个唯一的值?

我还想到了另一种方式,因为我使用MS Access数据库,我可以创建一个AutoNumber数据类型的列并将其分配给Random,但是你没有得到所需的确切12位数,有时它会生成10位数的值,有时更多或更少.

Joh*_*ker 8

以十二位数字开头,即:111111111111

获取新的"随机"唯一编号取以前的编号并加1.

虽然不是随机的,但它将保证唯一性.


Oli*_*ver 6

您每天,每小时,每分钟生成多少次新条形码?

您可以使用像Visual Studio工作的自动版本控制这样的技术.

  • 计算某个特定日期的天数(例如1.1.2000)
    • 填充0到5个地方.
  • 康卡特经过了几秒钟直到午夜
    • 填充也有零到五个地方.
  • 使用应用程序中的静态计数器填充最后两个数字,该计数器仅包含在99处.

public static class UniqueId
{
    static private int _InternalCounter = 0;

    static public string Get()
    {
        var now = DateTime.Now;

        var days = (int)(now - new DateTime(2000, 1, 1)).TotalDays;
        var seconds = (int)(now - DateTime.Today).TotalSeconds;

        var counter = _InternalCounter++ % 100;

        return days.ToString("00000") + seconds.ToString("00000") + counter.ToString("00");
    }
Run Code Online (Sandbox Code Playgroud)

通过这种方法,您将在2273年10月15日获得溢出,但我认为这可以由您的追随者解决.;-)

如果您需要每秒创建超过100个唯一ID,则可以将最后两行更改为:

var counter = _InternalCounter++ % 1000;
return days.ToString("0000") + seconds.ToString("00000") + counter.ToString("000");
Run Code Online (Sandbox Code Playgroud)

现在你每秒会有数千个唯一ID,但是2027年5月18日已经过了几天.如果太短,如果你用这一行将开始日期设置为2010,你可以再获得十年:

var days = (int)(now - new DateTime(2010, 1, 1)).TotalDays;
Run Code Online (Sandbox Code Playgroud)