12
votes

Créer un GUIG à partir d'un int

donné un int , comment créer le même guidon à plusieurs reprises?

edit:
J'implique deux systèmes, l'un utilise des INT comme clé primaire, l'autre reconnaît un objet par son GUID. Pour cette raison, je dois être en mesure de recréer le même guide pour un Int donné afin que le deuxième système puisse reconnaître les entités provenant du premier.


3 commentaires

Si le CDI devrait être lié d'une manière ou d'une autre à l'INT?


Est-ce pour tester quelque chose?


Vous devrez nous faire savoir quel système vous préférez.


4 Réponses :


2
votes

Vous pouvez convertir un INT64 en octet [] et utiliser la surcharge du constructeur pour le faire:

var guid = new Guid(byteArray);


0 commentaires

21
votes

Si vous créez un GUID basé sur un entier, il ne sera plus un identifiant unique globalement unique.

ayant dit que vous pouvez utiliser le constructeur qui prend un entier et d'autres paramètres: P>

int a = 5;
Guid guid = new Guid(a, 0, 0, new byte[8]);


1 commentaires

Travaux parfaits, les différents éléments du GUID me permettent également de distinguer également différents types d'entités. Merci!



11
votes

Si vous voulez que le GUID consiste à juste em> l'int alors:

int x = 5;
string padded = x.ToString().PadLeft(32,'0');
var intGuid = new Guid(padded);

intGuid.ToString(); // 00000000-0000-0000-0000-000000000005


0 commentaires

14
votes

Ceci est l'utilisation parfaite pour une version version 3 forte> ou une Version 5 forte> GUID.

Il existe cinq types de GUID: P>

  • 1: Version Time Basé (UuidcreeeSquential) LI>
  • 2: Version Security DCE, avec Posix Intégré UIDS LI>
  • 3: version basée sur les noms utilisant le hachage MD5 LI>
  • 4: Version générée au hasard ou pseudo-aléatoire (UUIDCREATE) LI>
  • 5: version basée sur les noms utilisant le hachage SHA-1 LI> ul>

    Version 3 et 5 Version 5 sont conçus pour avoir un nom arbitraire Name em> Toujours sur le même GUID EM>. P>

    L'idée est Prendre un nom arbitraire " nom em>" et un espace de noms "", les hachages, et le hachage est soigneusement em> stocké dans une structure générale, conceptuellement: p> xxx pré>

    Vous évitez les collisions du même "nom" en préfixant avec l'espace de noms " em>": p> xxx Pré>

    sauf plutôt que le "espace de noms" étant une chaîne, il est spécifié qu'il s'agissait d'un GUID: p> xxx pré>

    le RFC donne quatre uuides de noms de noms prédéfinis uuids: p> xxx pré>

    Le RFC décrit Comment mettre les 16 octets de votre hachage dans la structure des voyageurs. Si les 16 premiers octets de votre hachage sont les suivants: p> xxx pré>

    ils sont mappés dans la structure UUID: p> xxx pré>

    exécutant votre Les clients et les factures via mon NameToToToGuid CODE> Fonction donne: P>

    NameToGUIDA(Namespace_Customer, "1") =  {7E378BDB-5BB1-5EBF-9C63-E00AC1AEEDB7}
    NameToGUIDA(Namespace_Customer, "2") =  {830F19D8-D5DC-5321-8CF9-D708660BE473}
    NameToGUIDA(Namespace_Customer, "10") = {C052F6ED-0334-5827-B077-7F4C28B78223}
    
    NameToGUIDA(Namespace_Invoice, "1") =   {BB5408DA-B99C-5816-B144-A63CC02BB21C}
    NameToGUIDA(Namespace_Invoice, "2") =   {73DDD3B3-1139-50C8-9B0D-067145611346}
    NameToGUIDA(Namespace_Invoice, "10") =  {AE1799A8-620F-55DB-AC85-D7056B70AFB5}
    


1 commentaires

Une implémentation C # est affichée par Bradley Grainger Stackoverflow.com/a/5657517/62857