자바 UUID 생 성

15228 단어 자바
UUID 의 미 는 범용 유일한 식별 코드 (Universally Unique Identifier) 로 소프트웨어 구축 의 기준 이자 오픈 소스 소프트웨어 재단 (Open Software Foundation, OSF) 의 조직 이 분포 식 컴 퓨 팅 환경 (Distributed Computing Environment, DCE) 분야 의 일부분 이다.UUID 의 목적 은 분포 식 시스템 의 모든 요 소 를 중앙 제어 단 을 통 해 정 보 를 식별 할 필요 가 없 는 유일한 식별 정 보 를 가 질 수 있 도록 하 는 것 이다.이렇게 되면 누구나 다른 사람과 충돌 하지 않 는 UUID 를 만 들 수 있다.이런 상황 에서 데이터 베 이 스 를 만 들 때의 이름 중복 문 제 를 고려 할 필요 가 없다.현재 가장 광범 위 하 게 응용 되 고 있 는 UUID 는 마이크로소프트 의 Microsoft 's Globally Unique Identifiers (GUIDs) 이 고 다른 중요 한 응용 은 Linux ext 2 / ext 3 파일 시스템, LUKS 암호 화 분할 구역, GNOME, KDE, Mac OS X 등 이 있다.
다음은 UUID 를 구체 적 으로 생 성 하 는 예 입 니 다.
package test;

import java.util.UUID;

public class UUIDGenerator {
    public UUIDGenerator() {
    }

    public static String getUUID() {
        UUID uuid = UUID.randomUUID();
        String str = uuid.toString();
        //   "-"  
        String temp = str.substring(0, 8) + str.substring(9, 13) + str.substring(14, 18) + str.substring(19, 23) + str.substring(24);
        return str+","+temp;
    }
    //       UUID
    public static String[] getUUID(int number) {
        if (number < 1) {
            return null;
        }
        String[] ss = new String[number];
        for (int i = 0; i < number; i++) {
            ss[i] = getUUID();
        }
        return ss;
    }

    public static void main(String[] args) {
        String[] ss = getUUID(10);
        for (int i = 0; i < ss.length; i++) {
            System.out.println("ss["+i+"]====="+ss[i]);
        }
    }
}

 
결과:
[java]
  view plain copy
ss[0]=====4cdbc040-657a-4847-b266-7e31d9e2c3d9,4cdbc040657a4847b2667e31d9e2c3d9  
  • ss[1]=====72297c88-4260-4c05-9b05-d28bfb11d10b,72297c8842604c059b05d28bfb11d10b  

  • ss[2]=====6d513b6a-69bd-4f79-b94c-d65fc841ea95,6d513b6a69bd4f79b94cd65fc841ea95  
  • ss[3]=====d897a7d3-87a3-4e38-9e0b-71013a6dbe4c,d897a7d387a34e389e0b71013a6dbe4c  

  • ss[4]=====5709f0ba-31e3-42bd-a28d-03485b257c94,5709f0ba31e342bda28d03485b257c94  
  • ss[5]=====530fbb8c-eec9-48d1-ae1b-5f792daf09f3,530fbb8ceec948d1ae1b5f792daf09f3  

  • ss[6]=====4bf07297-65b2-45ca-b905-6fc6f2f39158,4bf0729765b245cab9056fc6f2f39158  
  • ss[7]=====6e5a0e85-b4a0-485f-be54-a758115317e1,6e5a0e85b4a0485fbe54a758115317e1  

  • ss[8]=====245accec-3c12-4642-967f-e476cef558c4,245accec3c124642967fe476cef558c4  
  • ss[9]=====ddd4b5a9-fecd-446c-bd78-63b70bb500a1,ddd4b5a9fecd446cbd7863b70bb500a1  

  • UUID 는 한 기계 에서 생 성 된 숫자 로, 같은 공중 에 있 는 모든 기계 에 유일 하 다 는 것 을 보증 하 는 것 을 알 수 있다.보통 플랫폼 에 서 는 생 성 된 API 를 제공 합 니 다.오픈 소프트웨어 재단 (OSF) 이 제정 한 표준 에 따라 계산 하면 이 더 넷 카드 주소, 나 초 급 시간, 칩 ID 코드 와 가능 한 많은 숫자 를 사용 했다.
    UUID 는 다음 과 같은 몇 가지 부분 을 조합 합 니 다.
    (1) 현재 날짜 와 시간, UUID 의 첫 번 째 부분 은 시간 과 관련 이 있 습 니 다. UUID 를 생 성 한 후 몇 초 후에 UUID 를 생 성 하면 첫 번 째 부분 이 다 르 고 나머지 는 같 습 니 다.
    (2) 시계 시퀀스
    (3) 전역 에서 유일한 IEEE 기기 식별 번 호 는 네트워크 카드 가 있 으 면 네트워크 카드 MAC 주소 에서 얻 을 수 있 고 다른 방식 으로 얻 을 수 있 는 네트워크 카드 가 없다.
    UUID 의 유일한 결함 은 생 성 된 결과 열 이 비교적 길 다 는 것 이다.UUID 라 는 표준 에 대해 가장 보편적으로 사용 되 는 것 은 마이크로소프트 의 GUID (Globals Unique Identifiers) 다.ColdFusion 에 서 는 CreateUUID () 함수 로 UUID 를 간단하게 생 성 할 수 있 습 니 다. 그 형식 은 xxxxxxxx - xxxx - xxxxxxxxxxxxxxxxxxxxxx (8 - 4 - 4 - 16) 이 고 그 중에서 각 x 는 0 - 9 또는 a - f 범위 내의 16 진법 의 숫자 입 니 다.표준 UUID 형식 은 xxxxxxxx - xxxx - xxxxxxx - xxxxxxxxxxxxxxxx (8 - 4 - 4 - 12) 로 cflib 에서 CreateGUID () UDF 를 다운로드 하여 변환 할 수 있 습 니 다.
    UUID 를 사용 하 는 장점 은 분포 식 소프트웨어 시스템 (예 를 들 어 DCE / RPC, COM +, CORBA) 에서 나타 날 수 있다. 이 는 각 노드 가 생 성 한 표지 가 중복 되 지 않 고 WEB 서비스 등 통합 기술 의 발전 에 따라 UUID 의 장점 이 더욱 뚜렷 해 질 것 이다.사용 하 는 특정 메커니즘 에 따라 UUID 는 서로 다 를 뿐만 아니 라 적어도 서기 3400 년 전에 다른 생 성 된 통용 되 는 유일한 식별 자 와 큰 차이 가 있다 는 것 을 보증 해 야 한다.
    통용 되 는 유일한 식별 자 는 대부분의 가능 한 물 체 를 가리 키 는 데 도 쓸 수 있다.마이크로소프트 와 다른 일부 소프트웨어 회사 들 은 전 세계 에서 유일한 식별 자 (GUID) 를 사용 하 는 경향 이 있다. 이것 은 유 니 버 설 유일한 식별 자 유형 으로 구성 대상 모듈 대상 과 다른 소프트웨어 구성 요 소 를 가리 킬 수 있다.첫 번 째 통용 되 는 유일한 식별 자 는 네트워크 컴퓨터 시스템 (NCS) 에서 만 들 어 졌 고 그 다음 에 오픈 소프트웨어 재단 (OSF) 의 분포 식 컴 퓨 팅 환경 (DCE) 의 구성 요소 가 되 었 다.
     
    package com.cib.cap4j.cfn.util;
    
    import java.net.InetAddress;
    import java.security.SecureRandom;
    
    /**
     * UUID   ,            UUID
     */
    public class UUIDGenerator {
        private static SecureRandom SEEDER_STATIC = null;
        private static byte[] ADDRESS             = null;
        private static String MID_VALUE_STATIC    = null;
        private String midValue = null;
        private SecureRandom seeder = null;
    
        static {
            try {
                ADDRESS = InetAddress.getLocalHost().getAddress();
                StringBuffer buffer = new StringBuffer(8);
                buffer.append(toHex(toInt(ADDRESS), 8));
                MID_VALUE_STATIC = buffer.toString();
                SEEDER_STATIC = new SecureRandom();
                SEEDER_STATIC.nextInt();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
        public UUIDGenerator() {
            StringBuffer buffer = new StringBuffer(16);
            buffer.append(MID_VALUE_STATIC);
            buffer.append(toHex(System.identityHashCode(this), 8));
            midValue = buffer.toString();
            seeder = new SecureRandom();
            seeder.nextInt();
        }
    
        /**
         *          32       String
         * 
         * @param obj
         *                     
         * @return
         */
        public static String generate(Object obj) {
            StringBuffer uid = new StringBuffer(32);
    
            // get the system time
            long currentTimeMillis = System.currentTimeMillis();
            uid.append(toHex((int) (currentTimeMillis & -1L), 8));
    
            // get the internet address
            uid.append(MID_VALUE_STATIC);
    
            // get the object hash value
            uid.append(toHex(System.identityHashCode(obj), 8));
    
            // get the random number
            uid.append(toHex(getRandom(), 8));
    
            return uid.toString();
        }
    
        /**
         *          32  String    
         */
        public String generate() {
            StringBuffer uid = new StringBuffer(32);
    
            // get the system time
            long currentTimeMillis = System.currentTimeMillis();
            uid.append(toHex((int) (currentTimeMillis & -1L), 8));
    
            // get the internet address
            uid.append(midValue);
    
            // get the random number
            uid.append(toHex(seeder.nextInt(), 8));
    
            return uid.toString();
        }
    
        private static String toHex(int value, int length) {
            char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
            StringBuffer buffer = new StringBuffer(length);
            int shift = length - 1 << 2;
            for (int i = -1; ++i < length;) {
                buffer.append(hexDigits[value >> shift & 0xf]);
                value <<= 4;
            }
    
            return buffer.toString();
        }
    
        private static int toInt(byte[] bytes) {
            int value = 0;
            for (int i = -1; ++i < bytes.length;) {
                value <<= 8;
                value |= bytes[i];
            }
    
            return value;
        }
    
        private static synchronized int getRandom() {
            return SEEDER_STATIC.nextInt();
        }
    }

    좋은 웹페이지 즐겨찾기