2014-11-23 2 views
0

ищет алгоритм, который при задании Первой и фамилии генерирует идентификатор так, что он состоит из чисто буквенно-цифровых символов. Кроме того, я хотел бы, чтобы это было как можно короче, сохраняя уникальность. Я надеялся на 10-12 символов - что-то, что мог войти человек.алгоритм генерации короткого уникального человекообразного идентификатора от первого и последнего имени

Я читал о предложениях вычисления хеша, а затем просто беру первые n байтов и модуль вызова с 36 (идея в том, что у вас есть отображение от 0-35 до букв a-z 0-9).

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

Я предполагаю, что я мог бы добавить некоторую кодировку времени генерации к созданному идентификатору, чтобы сделать его уникальным, но снова мне нужен способ для этого быть коротким.

Как вы знаете? Существуют ли специальные алгоритмы хэширования/методы усечения, на которые я должен пойти? Я буду внедрять его в javascript как часть статической html-страницы, используемой в качестве локального webapp.

Я просто беспокоюсь, так как крипто трудно, и я бы приветствовал советы от всех, кто думает, что они знают, что они с ним делают.

Если это помогает, количество идентификаторов, которые я ожидаю сделать, невелико - около 4 цифр.

+0

Что вы подразумеваете под понятием человека? Хэш, конечно, не дружественный человеку. – plalx

+0

Взгляните на этот вопрос [SO вопрос] (http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery) –

ответ

0

Один из методов заключается в использовании комбинации имени и фамилии, подобно тому, как крупные компании создают псевдонимы электронной почты. Если вы создаете только несколько тысяч, было бы непросто обойти столкновения. Это, вероятно, самый удобный для людей тип идентификатора, с которым приходится иметь дело. Например, Билл Смит был бы billsm или что-то подобное.

Если вы не хотите, чтобы ваши идентификаторы, чтобы быть легко угадываемы (хотя, если угадывание идентификатор влезает в вашу модель безопасности вы, вероятно, следует искать в том, что), то вы можете пойти с чем-то вроде следующего (непроверенной яваскрипта псевдокод):

var sequence = 1, 
    shardId = 1, 
    epoch = 1357027200000; 

function nextId() { 
    sequence = sequence + 1; 
    now = Date.now() - epoch; 
    seqId = sequence % 1023 
    nextId = now << 15 | shardId << 10 | seqId; 

    return (nextId).toString(36); 
} 
Смежные вопросы