Создать из строки максимум 32 байта - PullRequest
0 голосов
/ 18 апреля 2019

Мне нужно сгенерировать subtirng, который должен работать как уникальный идентификатор (что-то вроде хэша), так что с уменьшенным риском коллизий, для строки в JavaScript.Однако длина этой хеш / подстроки не должна превышать 32 байта.

Мне это нужно, потому что я должен хранить его в интеллектуальном контракте Solidity в качестве идентификатора этой строки.Я нашел много функций для получения и хэш-кода из строки в JavaScript, но это не то, что я ищу.

         String.prototype.hashCode = function() {
            var hash = 0,
                i, chr;
            if (this.length === 0) return hash;
            for (i = 0; i < this.length; i++) {
                chr = this.charCodeAt(i);
                hash = ((hash << 5) - hash) + chr;
                hash |= 0; // Convert to 32bit integer
            }
            return hash;
        };

Если у меня есть строка, подобная этой: «Здравствуйте, этоумный вопрос ", я ожидаю хеш, который представляет строку, например" hllhsmrtqstin ".Может быть даже меньше, чем 32 байта, но важно, чтобы эта длина не превышала эту длину, независимо от размера строки.

NB Я не ищу что-то вроде sha256, потому что мне нужен человеческий хэш readbale, который можно было бы преобразовать висходная строка, другой пример "Hello World"> "hlwld"

1 Ответ

1 голос
/ 18 апреля 2019

Вы можете заменить некоторые предметы, такие как

  • is
  • aeou
  • все не буквы
  • t с последующим символом h.
Hello, this is a smart question
h ll    h        smr t q  sti n

var string = 'Hello, this is a smart question'
    result = string.toLowerCase().replace(/is|[aeou]|[^a-z]|t(?=h)/g, '');
   
console.log(result);
...