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

时间:2010-03-18 04:50:50

标签: c# unique uniqueidentifier

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

参见示例:

printBar prnt = new printBar("123456789012");

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

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

4 个答案:

答案 0 :(得分:8)

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

获取新的“随机”唯一编号,取以前的编号并加1。

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

答案 1 :(得分:6)

您每天,每小时,每分钟生成一个新条形码的次数?

您可以使用类似Visual Studio自动版本的技术。

  • 计算某个特定日期的天数(例如1.1.2000)
    • 用0到5个地方填充。
  • Concat经过的秒数直到午夜
    • 也填充零到五个位置。
  • 使用应用程序中的静态计数器填充最后两个数字,该计数器仅包含在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");
    }

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

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

var counter = _InternalCounter++ % 1000;
return days.ToString("0000") + seconds.ToString("00000") + counter.ToString("000");

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

var days = (int)(now - new DateTime(2010, 1, 1)).TotalDays;

答案 2 :(得分:3)

使用RNG和哈希做:

10 - 流出12位数字
20 - 检查值是否为哈希值
30 - 如果它是转到其他的转到10
40 - 将值推入哈希值
50 - 返回新的12位数字
60 - 转到10

答案 3 :(得分:2)

您可以简单地使用:

var temp = Guid.NewGuid().ToString().Replace("-", string.Empty);
var barcode = Regex.Replace(temp,"[a-zA-Z]", string.Empty).Substring(0, 12);