怎样用java生成GUID与UUID
16lz
2021-01-22
GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID
07ca3dec-b674-41d0-af9e-9c37583b08bb
两种方式生成guid 与uuid
需要comm log 库
同样
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID
- importjava.util.UUID;
- publicclassTest{
- publicstaticvoidmain(String[]args){
- UUIDuuid=UUID.randomUUID();
- System.out.println(uuid);
- }
- }
07ca3dec-b674-41d0-af9e-9c37583b08bb
两种方式生成guid 与uuid
需要comm log 库
- /**
- *@authorAdministrator
- *
- *TODOTochangethetemplateforthisgeneratedtypecommentgoto
- *Window-Preferences-Java-CodeStyle-CodeTemplates
- */
- importjava.net.InetAddress;
- importjava.net.UnknownHostException;
- importjava.security.MessageDigest;
- importjava.security.NoSuchAlgorithmException;
- importjava.security.SecureRandom;
- importjava.util.Random;
- publicclassRandomGUIDextendsObject{
- protectedfinalorg.apache.commons.logging.Loglogger=org.apache.commons.logging.LogFactory
- .getLog(getClass());
- publicStringvalueBeforeMD5="";
- publicStringvalueAfterMD5="";
- privatestaticRandommyRand;
- privatestaticSecureRandommySecureRand;
- privatestaticStrings_id;
- privatestaticfinalintPAD_BELOW=0x10;
- privatestaticfinalintTWO_BYTES=0xFF;
- /*
- *StaticblocktotakecareofonetimesecureRandomseed.
- *IttakesafewsecondstoinitializeSecureRandom.Youmight
- *wanttoconsiderremovingthisstaticblockorreplacing
- *itwitha"timesincefirstloaded"seedtoreducethistime.
- *ThisblockwillrunonlyonceperJVMinstance.
- */
- static{
- mySecureRand=newSecureRandom();
- longsecureInitializer=mySecureRand.nextLong();
- myRand=newRandom(secureInitializer);
- try{
- s_id=InetAddress.getLocalHost().toString();
- }catch(UnknownHostExceptione){
- e.printStackTrace();
- }
- }
- /*
- *Defaultconstructor.Withnospecificationofsecurityoption,
- *thisconstructordefaultstolowersecurity,highperformance.
- */
- publicRandomGUID(){
- getRandomGUID(false);
- }
- /*
- *Constructorwithsecurityoption.Settingsecuretrue
- *enableseachrandomnumbergeneratedtobecryptographically
- *strong.SecurefalsedefaultstothestandardRandomfunctionseeded
- *withasinglecryptographicallystrongrandomnumber.
- */
- publicRandomGUID(booleansecure){
- getRandomGUID(secure);
- }
- /*
- *MethodtogeneratetherandomGUID
- */
- privatevoidgetRandomGUID(booleansecure){
- MessageDigestmd5=null;
- StringBuffersbValueBeforeMD5=newStringBuffer(128);
- try{
- md5=MessageDigest.getInstance("MD5");
- }catch(NoSuchAlgorithmExceptione){
- logger.error("Error:"+e);
- }
- try{
- longtime=System.currentTimeMillis();
- longrand=0;
- if(secure){
- rand=mySecureRand.nextLong();
- }else{
- rand=myRand.nextLong();
- }
- sbValueBeforeMD5.append(s_id);
- sbValueBeforeMD5.append(":");
- sbValueBeforeMD5.append(Long.toString(time));
- sbValueBeforeMD5.append(":");
- sbValueBeforeMD5.append(Long.toString(rand));
- valueBeforeMD5=sbValueBeforeMD5.toString();
- md5.update(valueBeforeMD5.getBytes());
- byte[]array=md5.digest();
- StringBuffersb=newStringBuffer(32);
- for(intj=0;j<array.length;++j){
- intb=array[j]&TWO_BYTES;
- if(b<PAD_BELOW)
- sb.append('0');
- sb.append(Integer.toHexString(b));
- }
- valueAfterMD5=sb.toString();
- }catch(Exceptione){
- logger.error("Error:"+e);
- }
- }
- /*
- *ConverttothestandardformatforGUID
- *(UsefulforSQLServerUniqueIdentifiers,etc.)
- *Example:C2FEEEAC-CFCD-11D1-8B05-00600806D9B6
- */
- publicStringtoString(){
- Stringraw=valueAfterMD5.toUpperCase();
- StringBuffersb=newStringBuffer(64);
- sb.append(raw.substring(0,8));
- sb.append("-");
- sb.append(raw.substring(8,12));
- sb.append("-");
- sb.append(raw.substring(12,16));
- sb.append("-");
- sb.append(raw.substring(16,20));
- sb.append("-");
- sb.append(raw.substring(20));
- returnsb.toString();
- }
- //Demonstratonandselftestofclass
- publicstaticvoidmain(Stringargs[]){
- for(inti=0;i<100;i++){
- RandomGUIDmyGUID=newRandomGUID();
- System.out.println("SeedingString="+myGUID.valueBeforeMD5);
- System.out.println("rawGUID="+myGUID.valueAfterMD5);
- System.out.println("RandomGUID="+myGUID.toString());
- }
- }
- }
同样
- UUIDuuid=UUID.randomUUID();
- System.out.println("{"+uuid.toString()+"}");
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成UUID的API。UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
更多相关文章
- 如何判断用户的java代码是否已成功编译?
- 如何获得嵌入式Jetty Web服务器来转储其JSP的临时Java代码
- 急求用jersey2.x+spring3.x 开发rest webservice Java代码实例
- “java.exe”已退出,代码为 1。
- Java 编程下的同步代码块(售票员)
- JAVA 关于图片上传的代码
- 线程“main”中的异常java.lang.RuntimeException:无法编译的源代
- java 和 C 代码运行效率的比较(整理)
- Java:IntelliJ想法生成的代码错误地为所有Class名称添加了其包名