📄 cmppmsgidgenerator.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 + -