任意の文字列を入力として受け取り、その文字列に基づいてGUIDを作成する関数を作成しようとしています。GUIDの形式は、理想的にはGUID
からの構造体である必要がありますobjbase.h
が、それほど重要ではありません。重要なのは、関数が決定論的であるが、常に(または常に十分に近い)異なる文字列に対して異なるGUIDを作成することです。
それを行うためにどのようなアルゴリズムを使用できますか?文字列の内容のビット演算について考えましたが、方向性を教えていただければ幸いです。
文字列の MD5 ハッシュを計算し、それを GUID であるかのように扱うのはどうですか? GUID と MD5 ハッシュはどちらも 128 ビット値です。
文字列をハッシュし、ハッシュの最初の 16 バイトを使用して GUID を作成できます (http://msdn.microsoft.com/en-us/library/90ck37x3.aspx)。
UUID バージョン 3 および 5 の仕様を確認します。
本質的に、文字列の MD5 (または SHA-1) を計算し、結果を逐語的に 128 ビット UUID に保存します。SHA-1 の場合、SHA-1 は 160 ビットを返すため、結果を切り捨てる必要があります。