2009-08-22 2 views
0

Я хотел создать уникальную строку длиной не более 15 символов в объективе C (или с помощью Iphone SDK 3.0).Создать уникальный String Iphone SDK 3.0

Мне это нужно для таблицы mysql. Я знаю, что инкремент mysql auto будет делать для первичного ключа, но мне действительно нужно отправить уникальный ключ из Iphone Itself.Каждый запись в моей таблице должна была иметь уникальный ключ.

Уникальная строка должна быть уникальных и буквенно-цифровой и не более 15 символов

Спасибо заранее, Шридхар,

ответ

1

Обычно я бы рекомендовал UUID/GUID (как NWCoder does in his link), но UUID - это 16 байт необработанных данных, поэтому он не может быть выражен в 15 байтах данных, что намного меньше в 15 буквенно-цифровых символах.

Итак, вопрос становится, как «уникально»?

Уникально для таблицы было бы просто, просто используйте значение incrementing и unsigned int или hex.

Уникальным для мира было бы более сложным. Вы можете приблизиться, создав UUID, а затем передав его с MD5, а затем возьмите столько битов, сколько сможете, и преобразуйте его в базу (10 + 26 + 26 для чувствительности к регистру или 10 + 26 для нечувствительности к регистру) и первые 15 символов.

Уникально для пользователя, но (как вы описали позже), уникального в присутствии не-интернет-подключения, было бы проще всего просто создать случайную строку из 15 буквенно-цифровых символов. Это, вероятно, будет функционально эквивалентно методу UUID/MD5 выше - по существу вероятность коллизии будет очень малой, и, учитывая, что пользователь будет иметь только несколько поездок, по существу нет шансов на коллизацию (предполагая, что вы семя генератор случайных чисел).

1

Существует простой ответ на этот вопрос, который вам не хватает. Каждая поездка имеет первичный ключ, состоящий из двух чисел.

Когда поездка создается на iphone, она получает уникальный номер (т.е. 1,2,3,4,5).

Когда поездка синхронизируется с сервером, вы даете iphoen специальный уникальный номер, который идет впереди, то есть, если число iphone является 10421, число поездка станет 10421.1, 10421.2 и т.д.)

Это гарантирует, что все идентификаторы всегда уникальны.

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