帖子地址:
http://www.iteye.com/topic/1017979
UUID是把128个二进制数,转换成32个16进制数的,每4个二进制数转换成一个16进制数。
如果是64(2的6次方)进制的话,应该是6个二进制数转换一个64进制数。
我们可以在UUID前面补加一个16进行数,让它成为33位的16进制数,共是132位二进制数。
这样就可以用22个64进制数表示132(22*6)位的二进制数。
结论是,可以把36位的UUID,去掉“-”变成32位的16进制数。
在这个数前面补一个16进制数,比如“0”,就变成了33位(132个二进制数,33*4)。
再把这个33位的16进制数,转换成22位的64进制数。
最终是把36位的UUID,变成一个22位的数表示,短了14位。
可略过以下代码,直接看5楼回复。
5楼代码比这优雅的多!
public class UUIDDemo {
public static void main(String[] args) {
String uuid = "1838efee-893d-3778-b480-43d6457767ea";
System.out.println("原始uuid:" + uuid);
uuid = uuid.replaceAll("-", "").toUpperCase();
System.out.println("去掉'-'变大写:" + uuid);
uuid = "0" + uuid;
System.out.println("前补16进制'0':" + uuid);
uuid = hexToBinary(uuid);
System.out.println("转换为132位2进制数:" + uuid);
uuid = binaryTo64(uuid);
System.out.println("转换为64进制数:" + uuid);
}
public static String hexToBinary(String hex) {
StringBuffer sb = new StringBuffer();
if (hex == null || "".equals(hex))
return "";
for (int i = 0; i < hex.length(); i++) {
sb.append(hexToBinary(hex.charAt(i)));
}
return sb.toString();
}
public static String hexToBinary(char hex) {
String binary = null;
switch (hex) {
case '0':
binary = "0000";
break;
case '1':
binary = "0001";
break;
case '2':
binary = "0010";
break;
case '3':
binary = "0011";
break;
case '4':
binary = "0100";
break;
case '5':
binary = "0101";
break;
case '6':
binary = "0110";
break;
case '7':
binary = "0111";
break;
case '8':
binary = "1000";
break;
case '9':
binary = "1001";
break;
case 'A':
binary = "1010";
break;
case 'B':
binary = "1011";
break;
case 'C':
binary = "1100";
break;
case 'D':
binary = "1101";
break;
case 'E':
binary = "1110";
break;
case 'F':
binary = "1111";
break;
default:
binary = "";
}
return binary;
}
public static String binaryTo64(String binary) {
StringBuffer sb = new StringBuffer();
if (binary == null || "".equals(binary))
return "";
if ((binary.length() % 6) != 0)
return "";
for (int i = 0; i < binary.length(); i += 6) {
sb.append(binaryTo64a(binary.substring(i, i + 6)));
}
return sb.toString();
}
public static String binaryTo64a(String binary) {
String result = null;
if ("000000".equals(binary)) {
result = "0";
} else if ("000001".equals(binary)) {
result = "1";
} else if ("000010".equals(binary)) {
result = "2";
} else if ("000011".equals(binary)) {
result = "3";
} else if ("000100".equals(binary)) {
result = "4";
} else if ("000101".equals(binary)) {
result = "5";
} else if ("000110".equals(binary)) {
result = "6";
} else if ("000111".equals(binary)) {
result = "7";
} else if ("001000".equals(binary)) {
result = "8";
} else if ("001001".equals(binary)) {
result = "9";
} else if ("001010".equals(binary)) {
result = "a";
} else if ("001011".equals(binary)) {
result = "b";
} else if ("001100".equals(binary)) {
result = "c";
} else if ("001101".equals(binary)) {
result = "d";
} else if ("001110".equals(binary)) {
result = "e";
} else if ("001111".equals(binary)) {
result = "f";
} else if ("010000".equals(binary)) {
result = "g";
} else if ("010001".equals(binary)) {
result = "h";
} else if ("010010".equals(binary)) {
result = "i";
} else if ("010011".equals(binary)) {
result = "j";
} else if ("010100".equals(binary)) {
result = "k";
} else if ("010101".equals(binary)) {
result = "l";
} else if ("010110".equals(binary)) {
result = "m";
} else if ("010111".equals(binary)) {
result = "n";
} else if ("011000".equals(binary)) {
result = "o";
} else if ("011001".equals(binary)) {
result = "p";
} else if ("011010".equals(binary)) {
result = "q";
} else if ("011011".equals(binary)) {
result = "r";
} else if ("011100".equals(binary)) {
result = "s";
} else if ("011101".equals(binary)) {
result = "t";
} else if ("011110".equals(binary)) {
result = "u";
} else if ("011111".equals(binary)) {
result = "v";
} else if ("100000".equals(binary)) {
result = "w";
} else if ("100001".equals(binary)) {
result = "x";
} else if ("100010".equals(binary)) {
result = "y";
} else if ("100011".equals(binary)) {
result = "z";
} else if ("100100".equals(binary)) {
result = "A";
} else if ("100101".equals(binary)) {
result = "B";
} else if ("100110".equals(binary)) {
result = "C";
} else if ("100111".equals(binary)) {
result = "D";
} else if ("101000".equals(binary)) {
result = "E";
} else if ("101001".equals(binary)) {
result = "F";
} else if ("101010".equals(binary)) {
result = "G";
} else if ("101011".equals(binary)) {
result = "H";
} else if ("101100".equals(binary)) {
result = "I";
} else if ("101101".equals(binary)) {
result = "J";
} else if ("101110".equals(binary)) {
result = "K";
} else if ("101111".equals(binary)) {
result = "L";
} else if ("110000".equals(binary)) {
result = "M";
} else if ("110001".equals(binary)) {
result = "N";
} else if ("110010".equals(binary)) {
result = "O";
} else if ("110011".equals(binary)) {
result = "P";
} else if ("110100".equals(binary)) {
result = "Q";
} else if ("110101".equals(binary)) {
result = "R";
} else if ("110110".equals(binary)) {
result = "S";
} else if ("110111".equals(binary)) {
result = "T";
} else if ("111000".equals(binary)) {
result = "U";
} else if ("111001".equals(binary)) {
result = "V";
} else if ("111010".equals(binary)) {
result = "W";
} else if ("111011".equals(binary)) {
result = "X";
} else if ("111100".equals(binary)) {
result = "Y";
} else if ("111101".equals(binary)) {
result = "Z";
} else if ("111110".equals(binary)) {
result = "_";
} else if ("111111".equals(binary)) {
result = "-";
} else {
result = "";
}
return result;
}
}
输出结果:
原始uuid:1838efee-893d-3778-b480-43d6457767ea
去掉'-'变大写:1838EFEE893D3778B48043D6457767EA
前补16进制'0':01838EFEE893D3778B48043D6457767EA
转换为132位2进制数:
000000011000001110001110111111101110100010010011110100110111011110001011010010000000010000111101011001000101011101110110011111101010
转换为64进制数:0oee-KyjQTubi0gZp5tSvG
分享到:
相关推荐
短8位uuid 用于兑换码,不重复,,本人用很好用,,分享给大家
PB生成UUID
主要介绍了java获取UUID与UUID的校验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
UUID生成工具类
手机UUID!
java 生成8位UUID,解决UUID2太长的问题,欢迎下载。后续代码,陆续放出
Math.uuid.js js 生成 uuid
UUID 由RFC4122文档定义,里面有实现,不过需要加上SHA1算法,MD5算法才完整。我整理了SHA1 MD5算法,实现了一个可直接使用的UUID的生成算法。
利用UUID生成完全不重复的数字 package com.example.uuid; import java.util.UUID; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View....
联想ThinkPad System UUID添加工具,直接支持U盘启动盘制作
供java学者参考,可以截取uuid以及Token
主板UUID修改工具5.13
破解软件必备 修改系统的uuid值 记得以管理员身份运行
jdk与javauuidgenerator生成uuid
利用雪花算法生成uuid
UDID自从被苹果公司禁止开发者使用,UUID便成为替代品,一般使用UUID的时候,当程序被卸载重装之后,UUID一般会被改变,无法保证唯一。但使用我代码里的方法,便可以保证唯一,即使程序被卸载重装之后也仍然是卸载前...
javascript 随机生成36为的UUID值
UUID 由两个 32 位部分组成。 第一部分基于当前时间(自纪元开始以来的秒数)。 当 UUID 不是批量生成时,即全部同时生成时,时间作为一个递增值,这样生成的 UUID 相隔很多秒几乎肯定是不同的(注意,不同机器上的...
为你提供一个可以产生一个不重复的UUID工具
COM组件uuid,GUID,CLSID,ProgID区别在哪儿.zip