从字符串生成最多32个字节的子字符串

问题描述 投票:0回答:1

我需要生成一个可以作为唯一标识符(类似哈希)的子目录,因此可以降低冲突的风险,对于JavaScript中的字符串。但是,此Hash / Substring的长度不应超过32个字节。

我需要这个,因为我将它存储在Solidity Smart Contract中作为该字符串的标识符。我发现很多函数可以从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个字节,但重要的是不管这个长度如何,无论字符串大小如何。

注:我不是在寻找像sha256这样的东西,因为我需要一个可以重新调整为原始字符串的人类readbale哈希,另一个例子是“Hello World”>“hlwld”

javascript hash solidity
1个回答
1
投票

你可以替换一些项目,比如

  • 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);
© www.soinside.com 2019 - 2024. All rights reserved.