我需要生成一个可以作为唯一标识符(类似哈希)的子目录,因此可以降低冲突的风险,对于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”
你可以替换一些项目,比如
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);