2014-10-22 16 views
29

Kennt jemand eine gute, solide Implementierung von C# wie Guid in Typoskript?Eine Typoskript Guid-Klasse?

Könnte ich selbst tun, aber dachte, ich würde meine Zeit verschonen, wenn jemand anderes es vorher getan hat.

Danke!

+2

@ Briguy37 Antwort in [Stack-Überlauf: Wie ein GUID/UUID in Javascript erstellen] (http://stackoverflow.com/a/8809472/2626313) – xmojmr

Antwort

70

Es gibt eine Implementierung in meinem TypeScript utilities basierend auf JavaScript GUID-Generatoren. Hier

ist der Code:

class Guid { 
    static newGuid() { 
     return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 
      return v.toString(16); 
     }); 
    } 
} 

// Example of a bunch of GUIDs 
for (var i = 0; i < 100; i++) { 
    var id = Guid.newGuid(); 
    console.log(id); 
} 

Bitte beachten Sie folgendes:

C# GUIDs sind garantiert eindeutig sein. Diese Lösung ist sehr wahrscheinlich um einzigartig zu sein. Es gibt eine große Kluft zwischen "sehr wahrscheinlich" und "garantiert" und Sie wollen nicht durch diese Lücke fallen.

JavaScript-generierte GUIDs eignen sich hervorragend als temporärer Schlüssel, den Sie verwenden, während Sie darauf warten, dass ein Server antwortet, aber ich würde ihnen nicht unbedingt als Primärschlüssel in einer Datenbank vertrauen. Wenn Sie sich auf eine JavaScript-generierte GUID verlassen, wäre ich versucht, jedes Mal, wenn eine GUID erstellt wird, ein Register zu überprüfen, um sicherzustellen, dass Sie kein Duplikat haben (ein Problem, das in einigen Fällen im Chrome-Browser aufgetreten ist)).

+4

mein Favoriten Warum sind Sie mit der Erzeugung von GUIDs das erste Zeichen der 3. Gruppe immer '4'? –

+8

@PaulGorbas Siehe https://en.wikipedia.org/wiki/Globally_unique_identifier - diese 4 gibt eine Art von GUID-Version an. Die 4 gibt an, dass es sich nicht um MAC-Adressbasen handelt, sondern um Pseudozufallsdaten, die möglicherweise nicht kryptografisch sicher sind. – ZoolWay

+3

"C# GUIDs" sind nicht mehr oder nicht weniger eindeutig als die von Ihrer Funktion erzeugten. Eine Kollision ist so extrem unwahrscheinlich, dass Sie sich absolut auf ihre Einzigartigkeit verlassen können. Sie können es natürlich als Primärschlüssel verwenden und das Überprüfen einer Registrierung ist nicht hilfreich. Diese Implementierung ist jedoch nicht kryptographisch sicher. Also können Werte vorhersehbar sein. Aber das ist kein Problem der Einzigartigkeit. – R2C2

9

fand ich dieses https://typescriptbcl.codeplex.com/SourceControl/latest

hier ist the Guid version sie haben, falls der Link nicht später funktioniert.

module System { 
    export class Guid { 
     constructor (public guid: string) { 
      this._guid = guid; 
     } 

     private _guid: string; 

     public ToString(): string { 
      return this.guid; 
     } 

     // Static member 
     static MakeNew(): Guid { 
      var result: string; 
      var i: string; 
      var j: number; 

      result = ""; 
      for (j = 0; j < 32; j++) { 
       if (j == 8 || j == 12 || j == 16 || j == 20) 
        result = result + '-'; 
       i = Math.floor(Math.random() * 16).toString(16).toUpperCase(); 
       result = result + i; 
      } 
      return new Guid(result); 
     } 
    } 
} 
+3

Leider setzt dieser hier nicht die obligatorischen Bitmuster für zufällige UUIDs, die erste Ziffer im dritten Segment muss 4 sein, das ist die UUID-Versionsnummer, und die erste Ziffer im vierten Segment muss die Bitmaske 10xx verwenden, also nur die Die Werte 8, 9, A und B sind in dieser Position erlaubt. Wiki-URL: https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29 –

+0

+1 für das Einfügen in den Quellcode, da der Link zu dieser Site keine Typoskript-Dateien und JS-Dateien mehr enthält Sie sehen nicht wie der Code aus, den Sie gepostet haben. –

+0

@PaulGorbas es tut. Ich habe den Link der Vollständigkeit halber hinzugefügt –