|
Хеширование строк в числовые последовательности | ☑ | ||
---|---|---|---|---|
0
bas28000
26.10.12
✎
10:11
|
Есть некие строки в таблице (ссылки), их необходимо неким образом преобразовывать в уникальную последовательность цифр, при том что эта последовательность должна быть не очень длинная. Никто не сталкивался с такой задачей? Если нужна конкретика, то нужно генерировать промо-коды для участников соц. сетей, используя ссылки на их профили.
|
|||
1
mikecool
26.10.12
✎
10:13
|
(0) обычный инкремент при регистрации не проканает?
|
|||
2
bas28000
26.10.12
✎
10:14
|
(1) Можно конечно, но изначально хочется иметь привязку именно к ссылке. А так да, но это последний вариант.
|
|||
3
mikecool
26.10.12
✎
10:15
|
(2) так при генерации кода сохраняй и ссылку в соответствии
вариант, что код совпадет для двух ссылок тоже есть |
|||
4
Asmody
26.10.12
✎
10:16
|
md5 не канает уже?
|
|||
5
bas28000
26.10.12
✎
10:16
|
Бог ты мой, сейчас задумался а не парсить ли страницы профилей в соц сетях, на предмет нахождения там id пользователей (он цифровой и можно было бы его брать прямо из ссылки, если бы не возможность у пользователей назначать свои короткие ссылки), зашел на Одноклассники и посмотрел их код - ахтунг, товарищи.
|
|||
6
bas28000
26.10.12
✎
10:17
|
(4) так не числовая же.
|
|||
7
dk
26.10.12
✎
10:22
|
vk вроде в фотках и видео искользует id юзера, наверняка еще где-нить id есть
|
|||
8
bas28000
26.10.12
✎
10:22
|
(7) Я выше писал про ОДК - шок и трепет от их кода. Но надо таки посмотреть, да. А в ВК ID действительно есть в коде страницы профиля.
|
|||
9
bas28000
26.10.12
✎
10:24
|
Кстати в ОДК тоже id нашел, сейчас еще в FB проверю.
|
|||
10
bas28000
26.10.12
✎
10:29
|
И в FB тоже есть.
|
|||
11
BigHarry
26.10.12
✎
10:31
|
(10) Ну все, ты раскрыл мировой заговор!
|
|||
12
bas28000
26.10.12
✎
10:33
|
(11) - ну, я бы все-таки лучше нашел нативную хеш-функцию числовую, наверняка же кто-то сталкивался в мире с таким ограничением.
|
|||
13
Asmody
26.10.12
✎
10:33
|
(6) а какая же?!
|
|||
14
Asmody
26.10.12
✎
10:34
|
(13)+ [Хеш содержит 128 бит (16 байт) и обычно представляется как последовательность из 32 шестнадцатеричных цифр.] wiki:md5
|
|||
15
BigHarry
26.10.12
✎
10:36
|
Ну если эти строки-ссылки не очень велики - то может какой-нить CRC попробовать?
|
|||
16
bas28000
26.10.12
✎
10:39
|
(13) ну там же есть символы в результате?
|
|||
17
ptiz
26.10.12
✎
10:39
|
(0) Короткие числа - только инкрементом.
Хэш будет намного длиннее (тот же MD5). |
|||
18
bas28000
26.10.12
✎
10:40
|
(14) да-да, только промо-код нужен именно состоящий из цифр, из десятичной системы.
(17) да вот тоже уже понимаю это |
|||
19
Asmody
26.10.12
✎
10:41
|
(18) а перевести hex в dec непосильная задача?
|
|||
20
bas28000
26.10.12
✎
10:43
|
(19) да я могу в целом и сам свою хеш функцию написать, но хочется нативное что-то. А так да, вполне себе способ.
|
|||
21
BigHarry
26.10.12
✎
10:48
|
(20) Что вкладывается в понятие "нативный"?
|
|||
22
bas28000
26.10.12
✎
10:55
|
(21) без самодеятельности.
|
|||
23
HeroShima
26.10.12
✎
10:57
|
(0) зазипуй
|
|||
24
HeroShima
26.10.12
✎
10:58
|
(22) своеобразное толкование, что сказать
|
|||
25
bas28000
26.10.12
✎
11:21
|
(24) ну в общем какими-то штатными средствами системы или какого-то языка.
|
|||
26
BigHarry
26.10.12
✎
11:23
|
(25) Смотрите штатные средства выбранного вами языка или СУБД, что тут еще посоветовать-то?
|
|||
27
ptiz
26.10.12
✎
11:32
|
(25) В последней БСП в МД5 хэшируется очень даже стандартными методами :)
Функция ВычислитьХешСтрокиПоАлгоритмуMD5(Знач Строка) a = ЧислоВБинарныйМассив(1732584193); // 01 23 45 67; (шестнадцатеричное представление, сначала младший байт) b = ЧислоВБинарныйМассив(4023233417); // 89 AB CD EF; c = ЧислоВБинарныйМассив(2562383102); // FE DC BA 98; d = ЧислоВБинарныйМассив(271733878); // 76 54 32 10; X = Новый Массив(16); // X - блок данных размером 512 бит, массив из 32-битных слов // разбиваем строку на блоки по 512 бит МассивБлоковИзСтроки = ПолучитьМассивБлоковБайтовИзСтроки(Строка); // для каждого блока производим расчет Для НомерБлока = 0 По МассивБлоковИзСтроки.Количество() - 1 Цикл Блок = МассивБлоковИзСтроки[НомерБлока]; Для НомерСлова = 0 по 15 Цикл Слово = 0; Для НомерБайта = 1 По 4 Цикл Слово = Слово + Блок[НомерСлова * 4 + НомерБайта - 1] * Pow(256, НомерБайта - 1); КонецЦикла; X[НомерСлова] = Слово; КонецЦикла; // в последний блок дописываем длину строки в битах Если НомерБлока = МассивБлоковИзСтроки.Количество() - 1 Тогда РазмерСтрокиВБитах = СтрДлина(Строка) * 8; X[14] = РазмерСтрокиВБитах % Pow(2,32); // сначала младшие 4 байта X[15] = Цел(РазмерСтрокиВБитах / Pow(2,32)) % Pow(2,64); // если длина превосходит (2^64 ? 1) бит, то старшие биты откидываем КонецЕсли; РассчитатьБлок(a, b, c, d, X); КонецЦикла; Результат = ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(a)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(b)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(c)) + ЧислоВШестнадцатеричномПредставлении(БинарныйМассивВЧисло(d)); Возврат Результат; КонецФункции |
|||
28
HeroShima
26.10.12
✎
11:33
|
С каких пор всякие MD5 гарантируют уникальность?
|
|||
29
orakool
26.10.12
✎
12:04
|
(28) С каких пор от хеширования требуют уникальности, как это делает автор топика с заголовке и внутри самого поста ?
|
|||
30
HeroShima
26.10.12
✎
12:06
|
(29) С этим как раз всё ясно - ТС нативный.
|
|||
31
Гинзбург
26.10.12
✎
12:13
|
где это все ?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |