GUID生成类一例
来源:互联网 发布:网络歌曲犯错 编辑:程序博客网 时间:2024/06/05 17:40
这是以前在网上找到的一个例子,具体网址忘了。所以不能给出引用链接,向作者致歉!
import java.net.InetAddress;import java.net.UnknownHostException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.util.Random;public class RandomGUID extends Object { public String valueBeforeMD5 = ""; public String valueAfterMD5 = ""; private static Random myRand; private static SecureRandom mySecureRand; private static String s_id; /* * Static block to take care of one time secureRandom seed. * It takes a few seconds to initialize SecureRandom. You might * want to consider removing this static block or replacing * it with a "time since first loaded" seed to reduce this time. * This block will run only once per JVM instance. */ static { mySecureRand = new SecureRandom(); long secureInitializer = mySecureRand.nextLong(); myRand = new Random(secureInitializer); try { s_id = InetAddress.getLocalHost().toString(); } catch (UnknownHostException e) { e.printStackTrace(); } } /* * Default constructor. With no specification of security option, * this constructor defaults to lower security, high performance. */ public RandomGUID() { getRandomGUID(false); } /* * Constructor with security option. Setting secure true * enables each random number generated to be cryptographically * strong. Secure false defaults to the standard Random function seeded * with a single cryptographically strong random number. */ public RandomGUID(boolean secure) { getRandomGUID(secure); } /* * Method to generate the random GUID */ private void getRandomGUID(boolean secure) { MessageDigest md5 = null; StringBuffer sbValueBeforeMD5 = new StringBuffer(); try { md5 = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { System.out.println("Error: " + e); } try { long time = System.currentTimeMillis(); long rand = 0; if (secure) { rand = mySecureRand.nextLong(); } else { rand = myRand.nextLong(); } // This StringBuffer can be a long as you need; the MD5 // hash will always return 128 bits. You can change // the seed to include anything you want here. // You could even stream a file through the MD5 making // the odds of guessing it at least as great as that // of guessing the contents of the file! 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(); StringBuffer sb = new StringBuffer(); for (int j = 0; j < array.length; ++j) { int b = array[j] & 0xFF; if (b < 0x10) sb.append('0'); sb.append(Integer.toHexString(b)); } valueAfterMD5 = sb.toString(); } catch (Exception e) { System.out.println("Error:" + e); } } /* * Convert to the standard format for GUID * (Useful for SQL Server UniqueIdentifiers, etc.) * Example: C2FEEEAC-CFCD-11D1-8B05-00600806D9B6 */ public String toString() { String raw = valueAfterMD5.toUpperCase(); StringBuffer sb = new StringBuffer(); 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)); return sb.toString(); } /* * Demonstraton and self test of class */ public static void main(String args[]) { RandomGUID myGUID = new RandomGUID(); System.out.println("valueBeforeMD5 -->" + myGUID.valueBeforeMD5); System.out.println("valueAfterMD5 -->" + myGUID.valueAfterMD5); System.out.println("RandomGUID=" + myGUID.toString()); }}
控制台打印:
valueBeforeMD5 -->agp138/168.9.201.138:1354181875222:2617300098220936058valueAfterMD5 -->ea1d90c35ad3662aeadf585c1d6ecd02RandomGUID=EA1D90C3-5AD3-662A-EADF-585C1D6ECD02
- GUID生成类一例
- GUID 生成
- 生成GUID
- 生成GUID
- 生成GUID
- GUID 生成
- GUID生成
- 生成GUID的代码
- 使用Delphi生成GUID
- VB.NET 生成GUID
- ASP生成GUID字符串
- 使用ASP生成 GUID
- oracle生成guid
- 模拟生成GUID码
- vb6 GUid 生成
- 通过javascript生成GUID
- 生成GUID的方法
- java生成GUID
- 一个Java程序员应该掌握的10项技能
- hibernate中用jdbc注意事项
- android ListView和GridView拖拽移位具体实现及拓展
- 深入理解 java I/O
- 数据绑定版省市选择器
- GUID生成类一例
- 泛型类型
- java中导出大量数据到Excel的一种方法
- SSAS 中查询Dimension表中的所有值
- jquery提交表单和处理响应
- apt-get命令工作原理简介
- 遍历一下Properties
- oprofile 使用之一(build)
- WinForm中log4net配置说明和使用