以下代码用于生成有序的GUID字符串。
使用方法为:new OrderedGUIDGenerator().NewGuid()即可生成根据时间排序的Guid字符串。
/**
* 用于生成根据时间戳附加随机数确定的有序GUID值
* 使用方法:var orderedGuid=new OrderedGUIDGenerator().NewGuid()
*/
export default class OrderedGUIDGenerator
{
//生成的Guid的格式为:dddddddd-dddd-Mddd-Ndnn-rrrrrrrrrrrr
// - M = RFC 版本(version), 这里取为4
// - N = RFC 变体(variant),这里固定为8
// - d = 从公元1年1月1日0时至今的时间总长(以100ns为单位)
// - n - 从公元1年1月1日0时至今的以纳秒为单位的时间的最后两位尾数(即在100ns范围内的尾数,其最小值0,最大值99,它是nanaseconds的最后两位尾数)
// - r = 随机数(random bytes)
private static DIFF:bigint=62135596800000000000n; //从公元1年1月1日0时0分0秒到公元1970年1月1日0时0分0秒的纳秒数
//nodeVitualStartTime表示node运行时启动时的纳秒数(从公元1年1月1日0时0分0秒算起)。资料显示,process.hrtime.bigint()方法计算的是方法调用时刻与node启动时的时间差(ns)
private static nodeVitualStartTime:big