Java、JavaScript、php、mysql、oracle生成uuid(32位)

来源:互联网 发布:燕十八知乎 编辑:程序博客网 时间:2024/04/27 00:35

Java、JavaScript、php、mysql、oracle生成uuid(32位)的方法

一、Java:

import java.net.InetAddress;public class IDGenerator {private String sep = "";private static final int IP;private static short counter = (short) 0;private static final int JVM = (int) (System.currentTimeMillis() >>> 8);private static IDGenerator uuidgen = new IDGenerator();static {int ipadd;try {ipadd = toInt(InetAddress.getLocalHost().getAddress());} catch (Exception e) {ipadd = 0;}IP = ipadd;}public static IDGenerator getInstance() {return uuidgen;}public static int toInt(byte[] bytes) {int result = 0;for (int i = 0; i < 4; i++) {result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i];}return result;}protected String format(int intval) {String formatted = Integer.toHexString(intval);StringBuffer buf = new StringBuffer("00000000");buf.replace(8 - formatted.length(), 8, formatted);return buf.toString();}protected String format(short shortval) {String formatted = Integer.toHexString(shortval);StringBuffer buf = new StringBuffer("0000");buf.replace(4 - formatted.length(), 4, formatted);return buf.toString();}protected int getJVM() {return JVM;}protected synchronized short getCount() {if (counter < 0) {counter = 0;}return counter++;}protected int getIP() {return IP;}protected short getHiTime() {return (short) (System.currentTimeMillis() >>> 32);}protected int getLoTime() {return (int) System.currentTimeMillis();}public String generate() {return new StringBuffer(36).append(format(getIP())).append(sep).append(format(getJVM())).append(sep).append(format(getHiTime())).append(sep).append(format(getLoTime())).append(sep).append(format(getCount())).toString();}}
二、JavaScript:

(function(window){//On creation of a UUID object, set it's initial valuefunction UUID() {this.id = this.createUUID();}// When asked what this Object is, lie and return it's valueUUID.prototype.valueOf = function() {return this.id;};UUID.prototype.toString = function() {return this.id;};//// INSTANCE SPECIFIC METHODS//UUID.prototype.createUUID = function() {//// Loose interpretation of the specification DCE 1.1: Remote Procedure Call// since JavaScript doesn't allow access to internal systems, the last 48 bits // of the node section is made up using a series of random numbers (6 octets long).//  var dg = new Date(1582, 10, 15, 0, 0, 0, 0);var dc = new Date();var t = dc.getTime() - dg.getTime();var tl = UUID.getIntegerBits(t, 0, 31);var tm = UUID.getIntegerBits(t, 32, 47);var thv = UUID.getIntegerBits(t, 48, 59) + '1'; // version 1, security version is 2var csar = UUID.getIntegerBits(UUID.rand(4095), 0, 7);var csl = UUID.getIntegerBits(UUID.rand(4095), 0, 7);// since detection of anything about the machine/browser is far to buggy, // include some more random numbers here// if NIC or an IP can be obtained reliably, that should be put in// here instead.var n = UUID.getIntegerBits(UUID.rand(8191), 0, 7)+ UUID.getIntegerBits(UUID.rand(8191), 8, 15)+ UUID.getIntegerBits(UUID.rand(8191), 0, 7)+ UUID.getIntegerBits(UUID.rand(8191), 8, 15)+ UUID.getIntegerBits(UUID.rand(8191), 0, 15); // this last number is two octets longreturn tl + tm + thv + csar + csl + n;};//Pull out only certain bits from a very large integer, used to get the time//code information for the first part of a UUID. Will return zero's if there //aren't enough bits to shift where it needs to.UUID.getIntegerBits = function(val, start, end) {var base16 = UUID.returnBase(val, 16);var quadArray = new Array();var quadString = '';var i = 0;for (i = 0; i < base16.length; i++) {quadArray.push(base16.substring(i, i + 1));}for (i = Math.floor(start / 4); i <= Math.floor(end / 4); i++) {if (!quadArray[i] || quadArray[i] == '')quadString += '0';elsequadString += quadArray[i];}return quadString;};//Replaced from the original function to leverage the built in methods in//JavaScript. Thanks to Robert Kieffer for pointing this one outUUID.returnBase = function(number, base) {return (number).toString(base).toUpperCase();};//pick a random number within a range of numbers//int b rand(int a); where 0 <= b <= aUUID.rand = function(max) {return Math.floor(Math.random() * (max + 1));};//变成全局函数window.createUUID = function(type){var _type = (typeof type == 'undefined' || (type!='l'&&type!='u')) ? 'l' : type;if(_type=='u'){return new UUID().toString();}else {return new UUID().toString().toLowerCase();}};})(window);
三、PHP:

class System {function currentTimeMillis() {list ($usec, $sec) = explode("  ", microtime());return $sec . substr($usec, 2, 3);}}class NetAddress {var $Name = 'localhost';var $IP = '127.0.0.1';function getLocalHost() //  static   {$address = new NetAddress();$address->Name = $_ENV["COMPUTERNAME"];$address->IP = $_SERVER["SERVER_ADDR"];return $address;}function toString() {return strtolower($this->Name . '/' . $this->IP);}}class Random {function nextLong() {$tmp = rand(0, 1) ? '-' : '';return $tmp . rand(1000, 9999) . rand(1000, 9999) . rand(1000, 9999) . rand(100, 999) . rand(100, 999);}}//  三段   //  一段是微秒  一段是地址  一段是随机数   class Guid {var $valueBeforeMD5;var $valueAfterMD5;function Guid() {$this->getGuid();}//   function getGuid() {$address = NetAddress :: getLocalHost();$this->valueBeforeMD5 = $address->toString() . ':' . System :: currentTimeMillis() . ':' . Random :: nextLong();$this->valueAfterMD5 = md5($this->valueBeforeMD5);}function newGuid() {$Guid = new Guid();return $Guid;}function toString() {$raw = strtoupper($this->valueAfterMD5);return substr($raw, 0, 8) . substr($raw, 8, 4) . substr($raw, 12, 4) . substr($raw, 16, 4) . substr($raw, 20);}}//生成32位uuidfunction createUUID(){$Guid = new Guid();$uuid = $Guid->toString();return strtolower($uuid);}

四、MySql:

SELECT UUID();  //带“-”SELECT REPLACE(UUID(), '-', '');  //不带“-”

五、Oracle:

 select sys_guid() from dual;//大写
 select LOWER(sys_guid()) from dual;//小写


欢迎大家指正和补充!

原创粉丝点击