2011-10-29 11 views
3

は、私がここで問題が見つかりました:この疑似GUIDジェネレータはmath.random()よりも優れていますか?

Create GUID/UUID in JavaScript?

答えは、次のJS提供:

function S4() { 
    return (((1+Math.random())*0x10000)|0).toString(16).substring(1); 
} 

function guid() { 
    return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); 
} 

は今、これのいくつかは私には愚かなようです。なぜそんなに繰り返しますか?私はこれを使って自分のサーバにアップロードされているファイルに名前をつけ、互いに上書きしないようにする予定でした。これは常に一意の番号を生成するようには見えません。

上記のコードは、ファイルmath.random()の名前の上に何の利点がありますか?それは種子を変えさえしない。

申し訳ありませんが、私が今までにGUID/UUIDで働いたことがありませんし、コードのいくつかは本当に

多くの人々が「AREN

明確化...私にはどんな意味がありません。私はそれに尋ねたように質問に答えません。多くの人がGUIDが常にユニークではないと説明しています。それは私が求めていることではありません。私は、ちょうどmath.random()を超えてそれを使用する点は何だったのかと尋ねています。

ジョーは私のコメントに最高の答えを与えたようです。

+4

答えでも、「実際のGUIDが必要ですか、またはGUIDのような乱数だけが必要ですか?これらは実際のGUIDではないためです。また、元のスレッドから: "ブラウザで公開されていないローカルコンピュータのプロパティに依存するため、Javascriptで実際のGUIDを生成する方法はありません。"だから私の質問です:GUIDが必要ですか?またはランダムなファイル名ですか? GUIDについて消費者として魔法のようなものは何もありません。それは見た目ではなく、その生成方法です。ランダムなファイル名では、クロックティック+乱数を使うと(少なくとも...)効果があります。 – Joe

+0

偽のGUIDを生成する点と、math.randomを使って生成する点は何ですか?名。両方とも同じファイル名を作成する可能性があります。 – FreeSnow

+0

あなたの場合、理由はありません。しかし、あなたが期待しているもの*とそのフォームのGUIDなどと話しているJSコードがあれば、純粋なJSで実際のものを生成することはできないので、同様のフォーマットのものを渡す必要があります。 – Joe

答えて

1

「実際のGUIDが必要ですか、またはGUIDのように見えるランダムな数字が必要ですか?これらは実際のGUIDではないためです。また、元のスレッドから: "ブラウザで公開されていないローカルコンピュータのプロパティに依存するため、Javascriptで実際のGUIDを生成する方法はありません。"だから私の質問です:GUIDが必要ですか?またはランダムなファイル名ですか? GUIDについて消費者として魔法のようなものは何もありません。それは見た目ではなく、その生成方法です。ランダムなファイル名では、クロックティック+乱数を使用すると(少なくとも...)有効です。

あなたのケースでは、理由はありません。しかし、あなたがGUIDやその形式のものを期待しているものと話しているJSコードを持っているなら、純粋なJSで本物のものを生成することはできないので、同様のフォーマットのものを渡す必要があります。

+0

UUIDに関するいくつかの追加情報:sはWikipediaで見つけることができます:http://en.wikipedia.org/wiki/Universally_unique_identifier –

2

たとえば、.NET GUIDはマシンに「結び付けられていません」。 .NETはGuid.NewGuid()Simple proof that GUID is not unique)にv4 UUIDを使用します。したがって、122ビットのランダム性と6固定ビットです。ここではAre GUID collisions possible?を読むことによって、SQL Serverは完全な乱数を使用しているようですが(チェックするSQL Serverはありません...チェックされています... v4の同じ形式を使用しているようです。次の「ブロック」は常に8,9、A、Bで始まります。したがって、122ビットのランダム性)。

この「ランダム」ジェネレータでは、「知っている」形式で128ビットのランダム性が得られますが、どのような問題がありますか?非固定形式の128ビット数を見たいですか?うわー!非常に実用的...ここ... 1つを43438471087229589138546501885363994076(GUIDはその数値に変換され、基数10)とします。さて、どのようにあなたのお気に入りのDBをそれを保存したいですか? VARCHARまたはNUMERIC?それをGUIDにパックする方が簡単でしょうか?

脇の下として... math.random()を超える利点は何ですか?さて、math.random()の一回の使用で、それは非常に明確です:-)私はmath.randomの1回の呼び出しにいくつのランダム性のビットがあるか分かりませんが、最大で63ビットです(JSでは64ビットですが、1ビットはサインのためのものです)。おそらく多くのものは少なくなります。

関連する問題