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

2018-10-12  本文已影响0人  假装是小宇

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);

}

}

上一篇下一篇

猜你喜欢

热点阅读