GUID 는 길이가 128 비트인 숫자로, 일반적으로 16 진수 16 으로 표시됩니다. 이 알고리즘의 핵심 아이디어는 시스템의 네트워크 카드, 현지 시간 및 난수를 결합하여 GUID 를 생성하는 것입니다. 이론적으로 기계가 초당 10000000 개의 GUID 를 생성하면 3240 년 동안 반복되지 않도록 보장할 수 있습니다.
UUID 는 1.5 의 새 클래스입니다. Java.util 에서 세계라는 고유 ID 를 생성하는 데 사용할 수 있습니다.
Java.util.uuid 가져오기
공용 클래스 테스트 {
공용 정적 void main(String[] args) {
Uuid uuid = uuid.randomuuid ();
System.out.println (uuid);
}
}
출력을 컴파일하고 실행합니다.
07ca3dec-b674-41d0-af9e-9c37583b08bb
Guid 와 uuid 를 생성하는 두 가지 방법
통신 로그 라이브러리가 필요합니다.
/* *
* @ 작성자 관리자
*
* TODO 이 생성된 유형 주석에 대한 템플릿을 변경하려면 로 이동하십시오
* 창-기본 설정-Java-코드 스타일-코드 템플릿
*/
Java.net.inetaddress 가져오기
Java.net.unknownhostexception 을 가져옵니다.
Java.security.messagedigest 가져오기
Java.security.nosuchalgorithm exception 가져오기
Java.security.securerandom 을 가져옵니다.
Java.util.random 을 가져옵니다.
공용 클래스 RandomGUID 확장 객체 {
Protectedfinalorg.apache.commons.logging.loglogger = org.apache.commons.logging.logfactory
。 Getlog (getclass ());
공용 문자열 valueBeforeMD5 =
공용 문자열 valueAfterMD5 =
개인 정적 랜덤 마이랜드;
Private static secure random mysecurerand;
개인 정적 문자열 s _ id
Private static final int pad _ below = 0x10;
Private static final int two _ bytes = 0xff;
/*
* 정적 블록 처리 일회용 안전 무작위 시드.
* SecureRandom 을 초기화하는 데 몇 초가 걸립니다. 여러분은
* 이 정적 블록 제거 또는 교체를 고려하고자 합니다
* 이 시간을 줄이기 위해 "첫 로드 이후 시간" 시드가 있습니다.
* 이 블록은 각 JVM 인스턴스에서 한 번만 실행됩니다.
*/
정적 {
Mysecurerand = new secure random ();
Long secure initializer = mysecurerand.nextlong ();
Myrand = newrandom (secure initializer);
시도 {
S_id = InetAddress.getLocalHost () 입니다. Tostring ();
} catch (UnknownHostException e) {
E. printstacktrace ();
}
}
/*
* 기본 생성자. 보안 옵션이 지정되지 않았기 때문에
* 이 생성자의 기본값은 낮은 보안, 고성능입니다.
*/
Public RandomGUID() {
GetRandomGUID(false););
}
/*
* 보안 옵션이 있는 생성자. 보안을 true 로 설정
* 생성된 각 난수를 암호화할 수 있도록 합니다
* 강력한 성능. 보안 휴가의 기본값은 표준 임의 함수의 초기 값입니다
* 암호화된 강력한 난수를 사용합니다.
*/
Public RandomGUID (부울 보안) {
GetRandomGUID (보안);
}
/*
* 임의 GUID 생성 방법
*/
개인 void getRandomGUID (부울 보안) {
MessageDigest MD5 = null
Stringbuffer sbvaluebefore MD5 = new stringbuffer (128);
시도 {
Md5 = messagedigest.getinstance ("MD5");
} catch (no such algorithm exception e) {
Logger.error ("error:"+e);
}
시도 {
Longtime = system.currenttimemillis ();
장란트 = 0;
(보안) {
Rand = mysecurerand.nextlong ();
} 그렇지 않으면 {
Rand = myrand.nextlong ();
}
Sbvaluebeformd5.append (s _ id);
Sbvaluebeformd5.append (":");
Sbvaluebeformd5.append (long.tostring (time));
Sbvaluebeformd5.append (":");
Sbvaluebeformd5.append (long.tostring (rand));
Valuebefore MD5 = sbvaluebefore md5.tostring ();
Md5.update (valuebeforemd5.getbytes ());
Byte [] array = md5.digest ();
Stringbuffer sb = 새 stringbuffer (32);
For(int j = 0;; J< 배열. 길이 ++j) {
Int b = array [j] & 2 바이트
If(b & lt;; PAD_BELOW)
Sb.append ('0');
Sb.append (integer.to hex string (b));
}
Valueaftermd5 = sb.tostring ();
} catch (예외 e) {
Logger.error ("error:"+e);
}
}
/*
* GUID 표준 형식으로 변환
* (SQL Server UniqueIdentifiers 등에 유용합니다. ) 을 참조하십시오
* 예: c2feeac-cfcd-11d1-8b05-00600806d9b6
*/
공용 문자열 toString() {
Stringraw = valueaftermd5.touppercase ();
Stringbuffer sb = new stringbuffer (64);
Sb.append (raw.substring (0,8));
누군가 추가 ("-");
Sb.append(raw.substring(8,12));
누군가 추가 ("-");
Sb.append (raw.substring (12,16));
누군가 추가 ("-");
Sb.append (raw.substring (16,20));
누군가 추가 ("-");
Sb.append (raw.substring (20));
Returnsb.tostring ();
}
//클래스 데모 및 자체 테스트
공용 정적 void main(String args[]) {
For(int I = 0;; 나< 100; I++) {
Randomguid myguid = new randomguid ();
System.out.println ("seedingstring ="+myguid.valuebeforemd5);
System.out.println ("rawguid ="+myguid.valueaftermd5);
System.out.println ("randomguid ="+myguid.tostring ());
}
}
}