2013-04-07 2 views
1

Я хотел бы иметь возможность генерировать буквенно-цифровые коды (как в дисконтных кодах), которые действительны для одного устройства Android, в течение ограниченного времени.Создание уникальных кодов на основе MAC-адреса

То есть, мне нужно найти способ генерации уникального бесконечного (или большого числа, по крайней мере) кодов, которые действительны только для одного устройства.

Я думал об использовании MAC-адреса в качестве «семени» для моего генерации кода, но я не знаю, как генерировать коды сами. Существуют ли общие подходы или решения этой проблемы?

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

+0

Есть много много вопросов о переполнении стека о создании уникального псевдослучайного ключи/коды. Перед публикацией используйте средство поиска. –

+0

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

ответ

1

По существу, вы ищете некоторую форму хеш-функции. Вы можете сделать это, создав случайное число в качестве базы. Как только вы это сделаете, вычислите его хэш (как строку), а также хэш его конкатенируется с MAC-адресом устройства. Код скидки может затем быть:

temp = hash(random()) 
code = concat(temp, hash(concat(mac_address, temp))) 

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

valid = hash(concat(mac_address, first_half(code))) == second_half(code) 

В качестве альтернативы, вместо случайного числа вы могли отслеживать, сколько было предложено и использовать это вместо случайного() вызова. Это должно всегда давать вам уникальные коды для обработки, и вы можете отслеживать, какие коды были выкуплены на вашем сервере.

  • В результате хеш-функции могут возникать столкновения, но вероятность этого очень мала, если вы выберете тщательно.

Очевидно, что все вышеперечисленное является очень общим псевдокодом. Надеюсь, это поможет.

Некоторая информация о хеш-функций (в частности криптографических те, которые, что вы хотите для безопасных вещей, как это):

http://en.wikipedia.org/wiki/Cryptographic_hash_function

+0

Это зависит от того, что означает OP, «уникальным». Если он действительно имеет значение, то хеш недостаточен ... –

+0

@ OliCharlesworth, для чего предназначена случайная часть - это позволяет использовать более одного кода на устройство, а вероятность столкновения зависит от хэш-функции и как случайна ваша случайная функция. –

+0

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

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