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