共计 1848 个字符,预计需要花费 5 分钟才能阅读完成。
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID():String{}
先看看下面的几个方法
1. 生成 [0,1) 的随机数的 Math.random, 例如
// 我这次运行生成的是:0.5834165740043102
Math.random()
2. 获取当前时间戳 Date.now
// 现在时间戳是 1482645606622
Date.now() = 1521009303858
3. 将 10 进制转换为其他进制的字符串 Number.toString
// 将 1482645606622 转换成二进制:10101100100110100100100001001000011011110
(1482645606622).toString(2)
// 转换成 16 进制:159349090de MongDB 中的 ObjectID 就是 24 位 16 进制数
(1482645606622).toString(16);// 最大进制支持转为 36 进制,使用字符是 0 -9a-z:ix48wvry
(1482645606622).toString(36)
GenNonDuplicateID 的自我进化
1. 随机数版本 v0.0.1
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(){return Math.random().toString()}
// 生成一个类似 0.1283460319177394 的 ID
GenNonDuplicateID()
2. 随机数版本 16 进制版本 v0.0.2
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(){return Math.random().toString(16)
}
// 函数将生成类似 0.c1615913fa915 的 ID
GenNonDuplicateID()
3. 随机数版本 36 进制版本 v0.0.3
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(){return Math.random().toString(36)
}
// 函数将生成类似 0.hefy7uw6ddzwidkwcmxkzkt9 的 ID
GenNonDuplicateID()
4. 随机数版本 36 进制版本 去掉 ”0.” v0.0.4
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(){return Math.random().toString(36).substr(3)
}
// 函数将生成类似 8dlv9vabygks2cbg1spds4i 的 ID
GenNonDuplicateID()
然而用一个随机数作为 ID,随着使用次数的累积,必然会出现相同的两个 ID
5. 引入时间戳 的 36 微进制版本 v0.1.1
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(){let idStr = Date.now().toString(36)
idStr += Math.random().toString(36).substr(3)
return idStr
}
// 函数将生成类似 ix49sfsnt7514k5wpflyb5l2vtok9y66r 的 ID
GenNonDuplicateID()
6. 引入时间戳 的 36 微进制版本 加入随机数长度控制 v0.1.2
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(randomLength){let idStr = Date.now().toString(36)
idStr += Math.random().toString(36).substr(3,randomLength)
return idStr
}
// GenNonDuplicateID(3) 将生成类似 ix49wl2978w 的 ID
GenNonDuplicateID(3)
这样生成的 ID 前面几位总是相同,看着不爽,于是再改改
7. 引入时间戳 随机数前置 36 进制 加入随机数长度控制 v0.1.3
/**
* 生成一个用不重复的 ID
*/
function GenNonDuplicateID(randomLength){return Number(Math.random().toString().substr(3,randomLength) + Date.now()).toString(36)
}
//GenNonDuplicateID()将生成 rfmipbs8ag0kgkcogc 类似的 ID
GenNonDuplicateID()
正文完
发表至: java
2019-09-16