|   |   | 
| 
 | Хеширование строк в числовые последовательности | ☑ | ||
|---|---|---|---|---|
| 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 | 
        где это все ?     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |