请问大神们,怎样才能生成唯一的字符串,给个思路吧
发布于 12 年前 作者 poplardddcn 12326 次浏览 最后一次编辑是 8 年前

请问大神们,cnodejs的话题topic后面的字符串 /topic/5133325adf9e9fcc58db31d2 是什么原理生成的,俺数了一下有24个字符 难道就不会生成重复的麼?

12 回复

好像可以用加密模块crypto生成

你没有看过node入门么?这个貌似就是存储的文档的 id 啊

这个是16进制的字符串,一般由MD5、SHA等算法生成。实际上作为文章唯一标识URL没必要这么长。文章唯一标识在系统内部可用number类型表示,方便管理,对外输出时再转化为字符串。比如转化成由

'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

62进制形成的字符串,这样一个5位字符串可以表示9亿(62的5次方)个文章标识。 这里有我写的转化函数:https://gist.github.com/zensh/4368330

这个是mongodb自动生成的_id值,我的项目jsGen中,没有使用mongodb自动生成的_id值,而是程序自增的number类型的_id

如果你仅需要唯一字符串,用MD5就好了:

var crypto = require('crypto');
function MD5(str, encoding) {
    return crypto.createHash('md5').update(str).digest(encoding || 'hex');
};
// test
// console.log(MD5('123'));

忘了说,调用

MD5(Date.now());

如果觉得毫秒精度不够,把process.hrtime()的纳秒混进去

谢谢你的讲解

你说到文章ID用number类型,为什么输出还要转为字符串呢?不解

我给你一个UUID的生成模块吧 https://github.com/broofa/node-uuid

adler32也可以生成

回到顶部