Guid--调用Guid.genID();
package com.ufgov.ar.common.util; import java.net.InetAddress; /**
* <p>
* Title: 产生唯一标识 /**
* 前4个字节是IP地址,接着8个字节是系统时间,最后4个字节是计数器。 在数据库中存储可以使用 char(32) 类型,保存如下字符串
* bfa78274000000006661bea400000003,可以由 toString()方法得到。 也可以用getData() 获得
* byte[16] 进行处理。
*/ public class Guid extends Object {
static int counter = 0; byte[] guts; /**
* 产生一个新的Guid.
*/
private Guid() {
guts = nextGuid();
} public static String genID(){
return (new Guid()).toString();
} /**
* 产生一个唯一标识
*
* @return byte[]
*/
public synchronized static byte[] nextGuid() {
try {
// 前4字节为ip
byte[] ip = InetAddress.getLocalHost().getAddress();
counter++;
byte[] guid = new byte[16];
for (int i = 0; i < 4; i++) {
guid[i] = ip[i];
}
// 然后8字节为系统时间
byte[] timeAry = Guid.long2bytes(System.currentTimeMillis());
for (int i = 4; i < 12; i++) {
guid[i] = timeAry[i - 4];
}
// 然后4字节为计数器
byte[] counterAry = int2bytes(counter);
for (int i = 12; i < 16; i++) {
guid[i] = counterAry[i - 12];
}
return guid;
} catch (Exception e) {
throw new RuntimeException(e.getMessage(),e);
}
} /**
* 产生唯一标识的大写
*
* @return the string
*/
public String toString() {
StringBuffer sb = toStringBuffer(); // 32位格式
return (new String(sb)).toUpperCase();
} /**
* 将唯一标识转成大写
*
* @return the string,长度32,中间没有分隔符
*/
private StringBuffer toStringBuffer() {
StringBuffer str = new StringBuffer();
String s;
int ii; byte ip[] = new byte[4];
for (int i = 0; i < 4; i++) {
ip[i] = guts[i];
}
s = Integer.toHexString(bytes2int(ip));
ii = 8 - s.length();
for (int i = 0; i < ii; i++) {
s = "0" + s;
}
str.append(s); byte time[] = new byte[8];
for (int i = 4; i < 12; i++) {
time[i - 4] = guts[i];
}
s = Long.toHexString(bytes2long(time));
ii = 16 - s.length();
for (int i = 0; i < ii; i++) {
s = "0" + s;
}
str.append(s); byte count[] = new byte[4];
for (int i = 12; i < 16; i++) {
count[i - 12] = guts[i];
}
s = Integer.toHexString(bytes2int(count));
ii = 8 - s.length();
for (int i = 0; i < ii; i++) {
s = "0" + s;
}
str.append(s); return str;
} /**
* 获取Guid内容
*
* @return byte[]
*/
public byte[] getData() {
return guts;
} private synchronized static byte[] long2bytes(long lParam) {
byte[] byteAry = new byte[8];
for (int i = 0; i < 8; i++) {
byteAry[i] = (byte) (lParam >> ((7 - i) * 8));
}
return byteAry;
} private synchronized static byte[] int2bytes(int iParam) {
byte[] byteAry = new byte[4];
for (int i = 0; i < 4; i++) {
byteAry[i] = (byte) (iParam >> ((3 - i) * 8));
}
return byteAry;
} private synchronized static long bytes2long(byte[] byteAry) {
if (byteAry == null || byteAry.length != 8) {
return 0;
}
long l = 0;
for (int i = 0; i < byteAry.length; i++) {
l += byteAry[i] << ((7 - i) * 8);
}
return l;
} private synchronized static int bytes2int(byte[] byteAry) {
if (byteAry == null || byteAry.length != 4) {
return 0;
}
int ii = 0;
for (int i = 0; i < byteAry.length; i++) {
ii += byteAry[i] << ((3 - i) * 8);
}
return ii; } public static void main(String args[]) {
System.out.println( Guid.genID());
}
}
Guid--调用Guid.genID();的更多相关文章
- 自定义GUID类
今天,同事发了个邮件说需要一个内部使用的GUID类,而不是System.Guid 结构体.什么意思呢? 例如public void Test(string guidPara) 这个方法的参数是个str ...
- 微软的COM中GUID和UUID、CLSID、IID
摘自:http://blog.csdn.net/zhongguoren666/article/details/6711396 当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全 ...
- JS 生成GUID
js 代码: function GUID() { this.date = new Date(); /* 判断是否初始化过,如果初始化过以下代码,则以下代码将不再执行,实际中只执行一次 */ if (t ...
- 有序GUID
背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramework等 ...
- 多数据库有序GUID
背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramework等 ...
- .Net:System.Guid
ylbtech-.Net:System.Guid 1.返回顶部 1.public static Guid NewGuid(); // // 摘要: // 初始化 System.Guid 结构的新实例. ...
- 针对多类型数据库,集群数据库的有序GUID
一.背景 常见的一种数据库设计是使用连续的整数为做主键,当新的数据插入到数据库时,由数据库自动生成.但这种设计不一定适合所有场景. 随着越来越多的使用Nhibernate.EntityFramewor ...
- 可排序的 COMB 类型 GUID
最新代码在这儿:CombGuid.cs 首先这里不做GUID与整形作为主键的优劣之争,GUID自有它优势,但GUID本身是乱序的,会对索引的维护带来性能上的损耗,数据量越大越明显. COMB 类型 G ...
- SQL Server 有序GUID,SequentialGuid,
问题描述 有序的GUID性能对比,堪比自增ID integer 一个大神告诉我NEWSEQUENTIALID() 在数据迁移的时候会有问题(感谢大神指点),所以我就深挖一下这个函数. 关于NEWSEQ ...
随机推荐
- python-笔记(六)模块操作以及常用模块简介
模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思是说把python代码写到里面,文件名就是模块的名称,例如:model.py model就是模块名称. 什么是包? ...
- 非web工程,打jar放shell执行
作为6年经验的程序员,一直在搞web服务应用开发,今天领导被吐槽了,只会web方面的东东,最基本的打包啥啥都不会.. 一般开发工程都是web项目,突然要求开发非web,不用tomcat装(浪费端口号) ...
- Caffe深度学习计算框架
Caffe | Deep Learning Framework是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的 Yangqing Jia,目前在Google工作.Caffe是 ...
- python 操作openpyxl导出Excel 设置单元格格式以及合并处理
贴上一个例子,里面设计很多用法,根据将相同日期的某些行合并处理. from openpyxl import Workbook from openpyxl.styles import Font, Fil ...
- failed to open stream: HTTP request failed! HTTP/1.1 505 HTTP Version Not Supported
PHP模拟GET请求支付宝退款链接(未用sdk 自己拼接的请求链接与参数); 起初用file_get_contents();就报错 :failed to open stream: HTTP requ ...
- 【Unity Shader】---UnityShader 提供的CG/HLSL语义
一.语义的解释 语义,其实就是一个赋给Shader输入和输出的字符串,这个字符串表达了这个参数的含义.通俗的讲这些语义可以让Shader知道从哪读取输送到哪里去,他们是在CG/HLSL的shader流 ...
- Bootstrap 学习笔记 项目实战 响应式轮播图
左右两个箭头可以随浏览器缩放进行移动 保持在图片中间 Html代码: <!DOCTYPE html> <html lang="zh-cn"> <hea ...
- mysql恢复备份导出
MySQL-5.7 备份与恢复 一.备份分类 按介质分类: 物理备份指通过拷贝数据库文件方式完成备份,适用于数据库很大,数据重要且需要快速恢复的数据库. 逻辑备份指通过备份数据库的逻辑结构和数据内 ...
- idea多行注释缩进
选中多行代码 - 按下tab键——向后整体移动 选中多行代码 - 按下shift + tab键——向前整体缩进(整体去掉代码前面的空格)
- idea下载和设置自动翻译(有道)
1:下载 点击file,点击settings,找到plugins,之后所搜translation并下载,他会自动从新启动idea 2:设置translation 3:这个应用ID和秘钥需要在有道智云去 ...