回答:
Java 5以降にバンドルされているUUIDクラスをご覧ください。
例えば:
java.util.UUID.randomUUID();
UUID.randomUUID
メソッドが複製を返すことは理論的には可能ですが、これはまったく現実的な問題ではありません。Oracle / OpenJDKの実装では、暗号的に強力な乱数ジェネレータが使用されます。それと、UUIDの非常に多くのビットによって与えられる天文学的な範囲を考えると、アプリで何百万ものそのような値を生成でき、それでも十分にスリープできます。他のバリアントのいずれかを使用すると、「空間と時間」、[1] MACアドレスまたは名前、[2]現在の日時が制約として使用されるため、衝突の可能性がさらにゼロに近づきます。
while
を取得するまで、新しいIDを生成するだけです:p
必要なUUIDの種類によって異なります。
標準Java UUID
クラスは、バージョン4(ランダム)UUIDを生成します。(UPDATE - バージョン3(名前)のUUIDも生成することができます。)それはそれらを生成することができないけれどもそれはまた、他の変異体を処理することができます。(この場合、「ハンドル」とUUID
はlong
、からのインスタンスbyte[]
またはString
表現を構築し、適切なアクセサを提供することを意味します。)
JavaのUUIDジェネレータ(JUG)実装の趣旨「で定義されたUUIDの全て3 『公式』のタイプをサポートするためにRFC-4122を RFCが実際に4種類を定義し、第五種類に言及しているのに...」。
UUIDのタイプとバリアントの詳細については、Wikipediaに適切な要約があります。詳細はRFC 4122とその他の仕様に記載されています。
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
。タイプ4用public static UUID randomUUID()
。タイプ1はJDKクラスでは使用できません。
clockSequence()
他の答えは正解です。特に、これはスティーブンCによるものです。
セキュリティ上の理由により、Java内でのUUID値の生成はバージョン4(ランダム)に制限されています。
UUIDの他のバージョンが必要な場合は、次の呼び出しにより、JavaアプリがJVMの外部に到達してUUIDを生成する方法があります。
uuidgen
、Mac OS X、BSD、およびLinuxにあります。uuid-ossp
uuid_generate_v1mc()
–バージョン1のUUIDを生成しますが、コンピューターの実際のMACアドレスではなくランダムなマルチキャストMACアドレスを使用します。uuid_generate_v5(namespace uuid, name text)
–バージョン5のUUIDを生成します。これは、ハッシュ方式としてSHA-1が使用されることを除いて、バージョン3のUUIDと同様に機能します。