2014-02-17 9 views
3

Я хочу сгенерировать 16-значный шестнадцатеричный серийный номер, например: F204-8BE2-17A2-CFF3.Нужен алгоритм для генерации серийного номера

(Эта картина дает мне 16^16 отчетливое серийный номер-Но мне не нужно их все)

Мне нужно, чтобы вы все мне предложить алгоритм для генерации этих серийных номеров-случайно с особая характеристика, которая является: каждые два последовательных-номера имеют (по-крайней мере) 6 различных цифр

(= это означает, что если вы получаете два наиболее похожий серийный-номер, они все равно должны иметь разницу в 6 показателей)

Я знаю, что хороший алгоритм с этой характеристикой должен помнить ранее сгенерированные серийные номера, и я этого не хочу.

На самом деле, мне нужен алгоритм, сделать это с вероятностью не менее для выбранной пары наехать (менее 0,001 кажется достаточно)

PS:
Я просто попытался создать 10K string беспорядочно используя MD5-хэш, и дал аналогичную строку (похоже = более трех одинаковых цифр) с вероятностью 0,00018.

+0

«с наименьшей вероятностью плохого серийного номера (менее 0,001 кажется достаточным». Все зависит от количества необходимых вам серийных номеров.Если вам нужно 16^16 + 1 из них, у вас обязательно будет хотя бы одно полное столкновение. –

+0

Мне нужен не более 1M серийный номер, который слишком меньше 16^16 – Emadpres

+0

Что вы подразумеваете под '0,001' probabilty? Вероятность столкновения выбранной пары или вероятности есть * какая-то пара, которая сталкивается? –

ответ

4

Возможно создание правильного генератора без необходимости запоминать все ранее сгенерированные коды. Вы можете генерировать порядковые номера, разделенные на 6 символов, с помощью Hamming code. Код помех может быть разработан для произвольного выделения двух разных генерируемых значений. Очевидно, что чем больше расстояние, тем выше избыточность вам придется использовать, что приводит к более сложному коду и более длинным номерам.

Сначала вы создаете код помех по своему вкусу, который кодирует число в последовательность шестнадцатеричных цифр, а затем вы можете использовать любую последовательность чисел и использовать ее в качестве семени, например простых чисел. Вам всегда нужно помнить, какой номер использовался последним и использовать следующий.

Если вы не нуждаетесь в надлежащем обеспечении минимального расстояния до двух серий и согласитесь на небольшую ошибку, я бы предположил, что любая полупорядочная хэш-функция или cypher должны производить прилично разнесенные выходы. Поэтому первое, что я постараюсь сделать, - это взять MD5 или SHA хэши и проверив их на номера 1 - 1000. Мои надежды, результаты будут вполне удовлетворительными.

0

Предлагаю вам посмотреть на генератор псевдослучайных бит ANSI X9.17. В этих slides приведен алгоритмический эскиз. ANSI X9.17 генерирует 64-битные псевдослучайные строки, которые вы хотите.

Пересмотренная и усовершенствованная версия этого генератора была одобрена NIST. Пожалуйста, взгляните на это page.

Теперь, независимо от того, используете ли вы генератор ANSI X9.17, другой генератор или разрабатываете свои собственные, рекомендуется, чтобы генератор прошел некоторые статистические тесты, чтобы обеспечить качество его псевдослучайных битов.

Примеры испытаний включают ENT battery, DIEHARD battery и NIST battery.

+0

Хорошо. Я тоже проверю это. – Emadpres

Смежные вопросы