⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmppmsgidgenerator.java

📁 采用JAVA开发
💻 JAVA
字号:
package com.gctech.util;

import java.util.Calendar;

/**
 * <p>Title: CMPP2.0消息ID生成器。</p>
 * <p>Description: CMPP2.0消息ID生成器。</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: GCTech</p>
 * @author 王红宝
 * @version $Id: CMPPMsgIdGenerator.java,v 1.1.1.1 2004/04/21 09:30:42 wanghb Exp $
 */

public class CMPPMsgIdGenerator {
  long gatewayCode;
  LimitedSynchronizedInt seq;
  public CMPPMsgIdGenerator(long gatewayCode) {
    this.gatewayCode = gatewayCode;
    seq = new LimitedSynchronizedInt(0, 1, 0xffff);
  }
  /**
   * 信息标识,生成算法如下:采用64位(8字节)的整数:
   * (1)时间(格式为MMDDHHMMSS,即月日时分秒):
   * bit64~bit39,
   * 其中bit64~bit61:月份的二进制表示;
   * bit60~bit56:日的二进制表示;
   * bit55~bit51:小时的二进制表示;
   * bit50~bit45:分的二进制表示;
   * bit44~bit39:秒的二进制表示;
   * (2)短信网关代码:bit38~bit17,
   * 把短信网关的代码转换为整数填写到该字段中。
   * (3)序列号:bit16~bit1,
   * 顺序增加,步长为1,循环使用。各部分如不能填满,左补零,右对齐。
   * */
  public long nextId(){

    Calendar cal = Calendar.getInstance();
    long month = cal.get(Calendar.MONTH)+1;
    long day = cal.get(Calendar.DAY_OF_MONTH);
    long hour = cal.get(Calendar.HOUR_OF_DAY);
    long minute = cal.get(Calendar.MINUTE);
    long second = cal.get(Calendar.SECOND);

    long rt = (month << 60) | (day << 55) |
        (hour << 50) | (minute << 44) | (second << 38)
        | (this.gatewayCode << 16) | seq.increment();
    return rt;
  }
  public static void main(String[] args) {
    CMPPMsgIdGenerator gene = new CMPPMsgIdGenerator(100);
    for ( int i = 0; i < 100; i++ ){
      System.out.println(Long.toBinaryString(gene.nextId()));
    }

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -