2009-08-22 10 views

Antwort

8

so etwas wie:

string uniqid(string prefix, bool more_entropy) { 
    if(string.IsNullOrEmpty(prefix)) 
     prefix = string.Empty; 

    if (!more_entropy) { 
     return (prefix + System.Guid.NewGuid().ToString()).Left(13); 
    } else { 
     return (prefix + System.Guid.NewGuid().ToString() + System.Guid.NewGuid().ToString()).Left(23); 
    } 
} 

Edit: Um Kommentare zu reflektieren

Dies ist eine sehr einfache aus der Spitze von meinem Kopf Lösung, und ich würde vorschlagen, dass für Eine rigorosere Lösung wäre die korrekte Generierung von Zufallszahlen, beispielsweise über den System.Math-Namespace. Bitte beachten Sie diese anderen .

System.Guid.NewGuid(). ToString()

Wollen Sie eine eindeutige Zeichenfolge geben.

+0

Vielen Dank - das ist etwas, was ich dachte, aber ich wollte sicher sein. –

+1

Denken Sie daran, dass nur der gesamte Guid fast sicher einzigartig sein soll. Das gilt nicht unbedingt für einen Teil der Zeichenfolgendarstellung. Siehe http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx – VolkerK

+0

String.Left() wäre String.Substring() in C# – sshow

6

Nach einigen googeln fand ich, wie uniqid Werke PHP und implementiert es in C#:

private string GetUniqID() 
{ 
    var ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)); 
    double t = ts.TotalMilliseconds/1000; 

    int a = (int)Math.Floor(t); 
    int b = (int)((t - Math.Floor(t)) * 1000000); 

    return a.ToString("x8") + b.ToString("x5"); 
} 

Dieser Code genau das gleiche Ergebnis liefert, ist der einzige Unterschied, dass zusätzliche Parameter uniqid() nicht umgesetzt werden.