Hashids如何生成唯一且不可预测的 ID

它的原理就是从数字经过一个加盐(salted)算法产生一个哈希(hash)字符串。这样算法就是通过混淆使结果具有不可预测性,而唯一性依然由数字本身来达成,从而得到(类似 youtube 里的)足够短,不可预测且唯一的 ID。


使用方法也很简单。先设定一个字符串作为 salt。

 

var Hashids = require("hashids"),

    hashids = new Hashids("this is my salt”);

然后对数字(准确来说是数字数组)进行编码


 

var hash = hashids.encrypt(12345);

// Nkk9

 

var hash = hashids.encrypt(683, 94108, 123, 5);

// aBMswoO2UB3Sj

对数组编码可以有很有趣的用法,比如需要在一个分布式的环境里使用,可以使用机器编号 + 序列数字组合数组然后再编码。


有编码就有解码

 

var numbers = hashids.decrypt("NkK9”);

// [12345]

编码的输出会随着数字的增大而变长,为了达到足够混淆,它可以指定最少长度。

 

hashids = new Hashids("this is my salt", 8);

 

var hash = hashids.encrypt(1);

// gB0NV05e

还有其它选项,比如控制输出所使用的字符


官网:https://hashids.org/

评论