Node.js 在NodeJS中,如何将哈希值强制转换为等于TSQL';s转换为唯一标识符

Node.js 在NodeJS中,如何将哈希值强制转换为等于TSQL';s转换为唯一标识符,node.js,tsql,uuid,Node.js,Tsql,Uuid,我们有一个使用以下方法在TSQL中创建uuid的过程: 选择Cast(HASHBYTES('MD5','some string')作为唯一标识符) 我在node js中创建了一个API,他们希望我能够从“some string”中创建相同的唯一标识符。可能吗?使用crypto,我可以获得与HASHBYTES命令相同的十六进制值(crypto.createHash('md5')。update('some string')。digest('hex')),但我不知道如何将其转换为TSQL返回的相同uu

我们有一个使用以下方法在TSQL中创建uuid的过程:

选择Cast(HASHBYTES('MD5','some string')作为唯一标识符)

我在node js中创建了一个API,他们希望我能够从“some string”中创建相同的唯一标识符。可能吗?使用crypto,我可以获得与HASHBYTES命令相同的十六进制值(
crypto.createHash('md5')。update('some string')。digest('hex')
),但我不知道如何将其转换为TSQL返回的相同uuid

我相信我想要的是v3 uuid,但我不知道名称空间是什么。我认为SSMS可能使用了特定于服务器的一些值来创建uuid,但我能够在三个不同的服务器上获得相同的值,两个在我们的网络上,另一个在随机的EC2实例上

我是不是误解了uuid的一些非常基本的东西?或者是否存在特定于Microsoft SQL Server的命名空间,所有服务器之间是否一致

我签出的节点库:uuid, uuid-1345, uuid-lib, 指南


我还尝试了aguid库,它似乎做了我想做的事情,但在SHA256中。我借用了代码并将其切换到md5,但随后我看到库所做的只是获取一个散列并在某些字符索引处添加一个4或8

一位朋友发现了TSQL是如何处理强制转换为唯一标识符的。他们只是重新排列散列的字符!下面是您在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() }

他们似乎每次都是用同样的方法(试了大约十个不同的字符串)。好时光