web-dev-qa-db-ja.com

UUIDによって生成される文字のタイプ

  1. Java.util.UUIDは特殊文字を生成しますか?
  2. UUIDによって生成される各文字のタイプ(大文字、小文字、数字など)は何ですか。
25
minil

UUID≠テキスト

明確にするために、 [〜#〜] uuid [〜#〜] は実際には128ビット値であり、テキストや数字ではありません。これらは、128ビットの符号なし整数と考えることができます。

16進数の文字列

人間は128ビットを128 1および0文字として読み書きすることはできません。人間が使用するためにUUIDを書き込む必要がある場合は、16進数 16進数 (数字0-9と文字a-f)文字列。 4つのハイフンでグループ化された32個の16進文字を使用して、これらの128ビットを合計36文字で表します。例えば:

550e8400-e29b-41d4-a716-446655440000

「特殊」文字はありません

質問で言及されている「特殊文字」については、UUIDの16進文字列表現でこれらの23の可能な文字のみが表示されます。

abcdefABCDEF1234567890-

仕様で必要な小文字

最新の 国際仕様 2008-08年付けの状態(私の強調):

6.5.4 UUIDの16進数表現を生成するソフトウェアは、大文字を使用してはなりません。注–人間が読める形式で使用される16進表記は、小文字に限定することをお勧めします。ただし、6.5.2で指定されているように、この表現を処理するソフトウェアは大文字と小文字の両方を受け入れる必要があります。

違反コモン

ただし、Microsoft、Apple、およびその他は一般に小文字の規則に違反しています。ある時点で、Microsoftは大文字と小文字の両方(大文字と小文字の両方を使用)を生成するソフトウェアをリリースしました。これは明らかに意図しない機能です。

仕様が言うようにしてください:

  • 出力には小文字を使用します。
  • 入力に対して小文字または大文字のいずれかを許容します。

Java UUID クラスのドキュメント ' toString メソッドドキュメント [ 〜#〜] bnf [〜#〜] UUID標準仕様とは異なり、文字列を生成するときに大文字を使用できます。ただし、クラスの実際の動作とそのtoStringメソッドは- Oracleの実装 for Java 8は正しいです。出力には小文字を使用しますが、入力には大文字または小文字のどちらも使用できます。

小文字/大文字のいずれかで入力します。

UUID uuidFromLowercase = UUID.fromString ( "897b7f44-1f31-4c95-80cb-bbb43e4dcf05" ); 
UUID uuidFromUppercase = UUID.fromString ( "897B7F44-1F31-4C95-80CB-BBB43E4DCF05" );

小文字のみに出力:

System.out.println ( "uuidFromLowercase.toString(): " + uuidFromLowercase );
System.out.println ( "uuidFromUppercase.toString(): " + uuidFromUppercase );

uuidFromLowercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05

uuidFromUppercase.toString():897b7f44-1f31-4c95-80cb-bbb43e4dcf05

これを参照してください コードはIdeOne.comでライブ実行

ゼロ値

UUIDがまだ不明な場合は、すべてゼロからなる特別なUUIDを使用できます。

00000000-0000-0000-0000-000000000000

値の例

値を生成する多くのWebサイトのいずれかを使用して、UUID値の例をいくつか見ることができます。例えば:

または、コマンドラインツールを使用します。ほぼすべてのオペレーティングシステムに、このようなツールがバンドルされています。 Mac OS Xで、 Terminal.app を起動し、uuidgenと入力します。

48
Basil Bourque

Java.util.UUID のjavadocは RFC 4122 にリンクしています

  Each field is treated as an integer and has its value printed as a
  zero-filled hexadecimal digit string with the most significant
  digit first.  The hexadecimal values "a" through "f" are output as
  lower case characters and are case insensitive on input.

そのため、特殊文字は生成されません。

8
sudocode

文字列に変換するように要求しない限り、UUIDは文字で構成されません。その時点で、16進文字とハイフンで構成される文字列に変換されます UUID.toString() のドキュメントで説明されています)。

(16進数が大文字か小文字かは文書化されていません。)

6
Jon Skeet

Internet RFC 4122 によれば、

各フィールドは整数として扱われ、その値はゼロで埋められた16進数の文字列として出力され、最上位の数字が最初になります。 16進値 "a"から "f"は小文字で出力され、入力では大文字と小文字は区別されません。

インターネット標準を尊重する場合は、常に小文字を使用してください。

BNFは大文字を定義しますが、出力ではなく入力用です。

1
Eonil