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 ...
随机推荐
- xcode archive灰色,无法打包的解决办法
问题如图: 解决办法:目前的运行配置是使用模拟器,改成“iOS Device”即可 step1: step2: 修改后archive选项变为黑色,可点击状态了
- (三)Maven之仓库
目录 引言:坐标和依赖是一个构件在Maven世界中逻辑表示方式,而构件的物理表示方式就是文件而已,仓库就是统一管理这些文件的地方. 目录 仓库类别 本地仓库 远程仓库: 中仓仓库(自带的默认远程仓库) ...
- C# 内存建表备忘
#region=====建表===== DataSet dataSet; // 创建表 DataTable table = new DataTable("testTable"); ...
- Newtonsoft.Json源码中的C#预处理指令
cs文件中包含以指令: #if !(NET35 || NET20 || PORTABLE40) 记事本打开[Newtonsoft.Json.Net20.csproj]可看到以下代码: <Defi ...
- TensorFlow学习笔记9-深度模型的优化
深度模型的优化 回顾概念: 代价函数时训练集上损失函数的平均: \[J(\theta)=E_{(x,y)\sim \hat{p}_{data}}L(f(x;\theta),y) \tag{1}\] 引 ...
- 结合element-ui封装的一个分页函数
第一次写博客,专门写给菜鸟看的,如果你是老鸟,你可以直接无视. 首先我们从豆瓣api获取到电影的数据列表 然后我们把他们切成一块一块的小数组 最后的数组将会是这样 原理就是以上的内容,接下来直接附上 ...
- CentOS7 redhat7 linux系统1分钟安装Zabbix web 监控 服务器
一.准备工作OS:centos7.4Zabbix version:3.4.6(2018/1/15日上线的新版本)Database:MariaDB关闭防火墙:systemctl stop firewal ...
- JavaBean简介和要求
JavaBean是一种Java语言写成的可重用组件. 所谓javaBean,是指符合如下标准的Java类: 类是公共的 有一个无参的公共的构造器 有属性,且有对应的get.set方法 用户可以使用Ja ...
- Codeforces 475D 题解(二分查找+ST表)
题面: 传送门:http://codeforces.com/problemset/problem/475/D Given a sequence of integers a1, -, an and q ...
- yield-Python大牛必须掌握的高端语法
小白:大牛哥,刚才看到有一个函数不使用return返回结果,而是使用yield关键字返回结果,看不太明白,Python中yield关键字的用途是什么,它有什么作用呀? 大牛: 要想理解yield的作用 ...