Как сгенерировать уникальный номер из 12 цифр? - PullRequest
1 голос
/ 18 марта 2010

Я работаю над приложением, которое отправляет необработанные данные на принтер Zebra и распечатывает штрих-коды. И поскольку каждый элемент имеет свой уникальный штрих-код, мне нужно определить переменную, которая автоматически генерирует уникальное число длиной 12 цифр.

см. Пример:

printBar prnt = new printBar("123456789012");

Есть ли в любом случае определить двойную переменную и передать ее функции, которая возвращает уникальное 12-значное число и снова передает ее в класс printBar ?. Но как сделать так, чтобы каждый раз, когда вы обращаетесь к нему, возвращалось уникальное значение?

Я также подумал о другом способе: поскольку я использую MS Access db, я могу создать столбец с типом данных AutoNumber и назначить его на Random, но вы не получите точно требуемые 12 цифр, иногда он генерирует значение 10 цифры иногда более или менее.

Ответы [ 4 ]

8 голосов
/ 18 марта 2010

Начните с двенадцатизначного числа, т.е.,

6 голосов
/ 18 марта 2010

Сколько раз вы генерируете новый штрих-код в день, час, минуту?

Вы можете использовать такую ​​технику, как автоматическое управление версиями в 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"); } При таком подходе вы получите переполнение 15 октября. 2273, но я думаю, что это может быть решено вашим последователем. ; -) Если вам нужно создать более ста уникальных идентификаторов в секунду, вы можете изменить две последние строки на: var counter = _InternalCounter++ % 1000; return days.ToString("0000") + seconds.ToString("00000") + counter.ToString("000"); Теперь у вас будет тысяча уникальных идентификаторов в секунду, но дни уже переполнятся в 18. Май 2027. Если это слишком мало, вы можете получить дополнительные десять лет, если вы установите дату начала в 2010 в этой строке: var days = (int)(now - new DateTime(2010, 1, 1)).TotalDays;

3 голосов
/ 18 марта 2010

Использование RNG и хэша:

10 - выводить 12 цифр
20 - проверить, есть ли значение в хэше
30 - если идти до 40, то еще до 10
40 - вставить значение в хеш
50 - вернуть новый 12-значный номер
60 - до 10

2 голосов
/ 23 сентября 2014

Вы можете просто использовать:

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