Node-AnyID萬能 ID 生成器
在程序里經(jīng)常都需要生成一些特定格式的 id ,每種場合的需求都可能有些不一樣,雖然寫起來代碼不復雜,但零零碎碎的東西做多了也挺煩的,于是設計了這個用于 node.js 的萬能 ID 生成器。
AnyID 生成的 ID 為字符串(也可以純數(shù)字),信息密度盡可能的高,也就是用最少的位數(shù)表示盡量多的信息。
AnyID 設計的首要考慮原則是 API 的直觀易用??纯催@些例子:
指定長度,隨機值填充
21 個字符,包含大寫小寫字母和數(shù)字。 這個 ID 的碰撞可能性跟 type 4 (random) UUID 一樣低。
const ids = anyid().encode('Aa0').length(21).random()
const id = ids.id();
1LrKcmd0uk1Ma8szUxtda
多個分段
第一段根據(jù)進程號生成,第二段根據(jù)時間生成。
const ids = anyid()
.encode('0A-IO')
.section( anyid().fixed(process.pid) )
.delimiter('-')
.section( anyid().time() );
生成的 ID 是閱讀友好的:排除了字母 I 和 O 因為容易和數(shù)字 1和 0混淆。
008CL-00TYMZS0P3
自增序列,指定位(bit)長度
這是生成 Twitter Snowflake 風格的 ID ,包含了時間, 序列號和 worker 標識。
const ids = anyid()
.encode('0')
.bit(41).time().since(new Date('2016-7-1'))
.bit(12).seq().resetByTime();
.bit(10).fix(workerId);
為了節(jié)省位空間,微秒時間從 2016-7-1 算起。
071243223959339218
函數(shù)值
每次生成 ID 時調(diào)用函數(shù)獲得返回值。第一段是秒,第二段是納秒。
const nanotime = () => {
return process.hrtime()[1];
};
const ids = anyid()
.encode('Aa0')
.section( anyid().time('s') )
.delimiter('+')
.section( anyid().of(nanotime) );
BlX6bX+j3Uz0
參數(shù)綁定
第一二段的值在調(diào)用時通過傳入?yún)?shù)給出
const ids = anyid()
.encode('Aa0')
.section( anyid().variable('countryId') )
.delimiter('-')
.section( anyid().variable('userId') )
.delimiter('-')
.section( anyid().length(5).random() );
const id = ids.id({ countryId: 86, userId: 635023 });
AAABY-ACpMT-EBwQJ評論
圖片
表情
