2017-05-17 1 views
0

Nous avons un processus de création des années UUID dans TSQL en utilisant les éléments suivants:Dans Node JS, comment lancer une valeur de hachage comme UUID égale à Cast TSQL Comme Uniqueidentifier

SELECT Cast(HASHBYTES('MD5', 'some string') as uniqueidentifier)

J'ai créé une API dans le nœud js , et ils veulent que je sois capable de créer le même identifiant unique à partir de 'une chaîne'. Est-ce possible? En utilisant crypto, je peux obtenir la même valeur hexadécimale que la commande HASHBYTES (crypto.createHash('md5').update('some string').digest("hex")), mais je ne sais pas comment je pourrais le convertir en le même uuid que TSQL retourne. Je crois que ce que je veux est un uuid v3, mais je ne sais pas ce que l'espace de noms serait. Je pensais que SSMS utilisait peut-être une valeur spécifique au serveur pour créer l'uuid, mais j'ai pu obtenir la même valeur sur trois serveurs différents, deux sur notre réseau et un autre sur une instance EC2 aléatoire. Est-ce que je me méprends sur quelque chose de très basique à propos de l'uuid? Ou existe-t-il un espace de noms spécifique à Microsoft SQL Server, cohérent entre tous les serveurs?

bibliothèques Node J'ai vérifié: UUID, UUID-1345, UUID-lib, guid

J'ai aussi essayé la bibliothèque aguid, qui semble faire ce que je veux mais SHA256. J'ai emprunté le code et l'ai changé en md5, mais ensuite j'ai vu que toute cette bibliothèque est en train de faire un hachage et d'ajouter un 4 ou 8 à certains index de caractères.

Répondre

0

Un ami a compris comment les transtypages TSQL sont castés en tant qu'identifiant unique. Ils réarrangent juste les caractères du hachage! Voici comment vous le feriez en Javascript:

var castAsUuid = function(str){ var x = str.substring(6, 8) + str.substring(4, 6) + str.substring(2, 4) + str.substring(0, 2) + '-' + str.substring(10, 12) + str.substring(8, 10) + '-' + str.substring(14, 16) + str.substring(12, 14) + '-' + str.substring(16, 20) + '-' + str.substring(20, 32) 

x.toUpperCase de retour() }

Ils semblent le faire de la même façon à chaque fois (essayé une dizaine de chaînes différentes). Bon temps.