Как сделать ios UDID короче, но все же уникальным? - PullRequest
1 голос
/ 04 апреля 2011

Я хочу сделать UDID устройства iOS не более 15 символов.

Я портирую клиент-серверное программное обеспечение на базе Symbian на iOS.Серверная сторона использует IMEI (15 цифр) для идентификации телефона клиента.Теперь на iOS UDID слишком длинный (40 шестнадцатеричных цифр).Поскольку я хочу минимизировать изменение серверной программы или БД, мне нужно сохранить UDID в varchar (15).

Так что есть какой-либо способ сделать UDID короче, но все же уникальным.Было бы намного лучше, если бы я мог также получить UDID из закороченной строки.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2011

Вы можете преобразовать шестнадцатеричные цифры в 20 символов Latin-1 (≤0xff) или 10 Unicode BMP символов (≤0xffff).

Если этот varchar (15) может принимать символы Unicode BMP, то все готово.

В противном случае вы можете нарезать последние 5 символов из этих 20 символов Latin-1. UDID на самом деле представляет собой SHA-1 хэш некоторых уникальных для устройства значений, которые можно считать довольно случайными, а цифры распределены равномерно. Следовательно, с 15 символами Latin-1 сокращенный UDID должен представлять 256 15 ~ 10 36 устройств, что более чем достаточно.

Фактически, даже если вы просто берете 15 шестнадцатеричных символов из UDID, он уже может представлять ~ 10 18 устройств.

Обратите внимание, что последние 2 метода являются потерями, т.е. вы не можете получить полный UDID из 15 символов.

2 голосов
/ 02 ноября 2012

Я только что написал эту суть -> https://gist.github.com/3996097

Что вы думаете о CFUUID + sha1 + подстрока + случайная прописная буква?

//Get a random hash (Generated from CFUUID+sha1)
NSString *hash = [NSString sha1:[NSString getUUID]];

//Shorten the sha1
NSString *short_random_id = [hash substringFromIndex:[hash length]-10];

//Random uppercase / lowercase the id
NSMutableString *random_id_final = [NSMutableString string];
for (NSUInteger i = 0; i < [short_random_id length]; i++)
{
    NSString *substring = [short_random_id substringWithRange:NSMakeRange(i, 1)];
    [random_id_final appendString:(rand() % 2) ? [substring lowercaseString] : [substring uppercaseString]];
}
...