基于php雪花算法-生成唯一Id

Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID

class Idcreate

{

  const EPOCH = 1479533469655;  //开始时间,固定一个小于当前时间的毫秒数

  const max12bit = 1024;

  const max41bit = 1099511627888;

  static $machineId = null;  // 机器id

  public static function machineId($mId = 0)

{

    self::$machineId = $mId;

}

  public static function createOnlyId()

{

    // 时间戳 42字节

    $time = floor(microtime(true) * 1000);

    // 当前时间 与 开始时间 差值

    $time -= self::EPOCH;

    // 二进制的 毫秒级时间戳

    $base = decbin(self::max41bit + $time);

    // 机器id 10 字节

    if(!self ::$machineId) {

      $machineid = self ::$machineId;

    } else {

      $machineid = str_pad(decbin(self ::$machineId),10,"0",STR_PAD_LEFT);

}

    // 序列数 12字节

    $random = str_pad(decbin(mt_rand(0,self::max12bit)),12,"0",STR_PAD_LEFT);

    // 拼接

    $base = $base . $machineid . $random;

    // 转化为 十进制 返回

    return bindec($base);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下午刚上班,店里匆匆来了一个人,我恍惚觉得面熟,小伙子冲我一笑,说“姐,我来给你看看你们的开票软件升级。...
    微荷阅读 271评论 2 1
  • (文/亦浓) 星辰清冷的光辉 夜空里散尽了温柔 失望 如秋天的叶子 扑簌簌掉落 零星的橘子散落桌边 哭丧着失却水分...
    开在夜里的花儿阅读 207评论 8 15
  • 元宵节到了,来学校进行了快乐,猜灯谜。 活动终于要开始了,我们激动不已,恨不得立马冲出去。徐老师先说明了要...
    樊诗豪阅读 209评论 0 0
  • 你陪我一程,我念你一生 来自十点读书 文 | 茶茶 人与人之间,因缘而聚,缘尽分离。 有太多人走着走着就散了,从彼...
    韩静萱阅读 341评论 0 1