JavaのUUIDクラスはランダムなUUIDを生成します。しかし、これは文字と数字で構成されています。一部のアプリケーションでは、数字のみが必要です。 Javaで数字のみで構成されるランダムなUUIDを生成する方法はありますか?
UUID.randomUUID();
乱数は必要ないが、番号付きのUUIDは以下を使用するだけの場合:
String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
この場合、40個のゼロまでパディングされたままになります。
の結果:
UUID:b55081fa-9cd1-48c2-95d4-efe2db322a54
に:
UUID:0241008287272164729465721528295504357972
Random
数値を生成して、必要な形式に変換しないのはなぜですか?
これは、箱から出してすぐに独自性を与えることはありません。 (つまり、各世代にチェックを実装し、ロジックを再試行する必要があります)
一方、UUIDビットを取得して数値に変換する他のソリューションは、一意性がより細かくなります。ユースケースによっては、このアプローチで一意性を確認することもできます。
この質問の元の投稿者は@JigarJoshiの質問をベストアンサーとしてマークしましたが、場合によっては乱数ではなくUUIDを使用する理由があることを付け加えたいと思います。違いは、UUIDは(普遍的に)一意である(したがって名前が付けられている)のに対し、乱数はそうではないということです。乱数を生成するときに同じ番号を2回取得するのか、それとももっと頻繁に取得するのかは確率の問題ですが、これはUUIDでは発生しません。したがって、@ ChrisEiblの回答が最良の回答だと思います。
記録のために:UUIDは実際には128ビット数です。
英数字の文字列として表示されるのは、16進数(0..9A..F)を使用した128ビットの数値の表現です。
実際の解決策は、文字列を対応する128ビット数に変換することです。そして、それを保存するには、2つのLongが必要です(Longは64ビットです)。
UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
+ Long.toString(uuid.getLeastSignificantBits());
UUIDが必要ないのに、なぜUUIDクラスを使用するのですか? Java.util.Random
クラスを使用して実現できる乱数だけが必要なようです。