标签: guid

我应该如何在Oracle中存储GUID?

我来自SQL server世界,我们有uniqueidentifier.在甲骨文中有同等的东西吗?将经常查询此列,因此性能是关键.

我在.Net中生成GUID并将其传递给Oracle.由于一些原因它不能由oracle生成,所以我不能使用序列.

database oracle guid

46
推荐指数
2
解决办法
6万
查看次数

编译器不应该允许Guid == null

下面描述的行为仅适用于.net-3.5

我刚刚遇到了C#编译器中最令人惊讶的行为;

我有以下代码:

Guid g1 = Guid.Empty;
bool b1= (g1 == null);
Run Code Online (Sandbox Code Playgroud)

好吧,Guid不可为空,因此永远不能等于null.我在第2行进行的比较总是返回false.

如果对整数做同样的事情,编译器会发出警告,说结果总是为false:

int x=0;
bool b2= (x==null);
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么编译器允许你将Guid与null进行比较
据我所知,它已经知道结果总是错误的.
内置转换是否以编译器假定null为可能值的方式完成?
我在这里错过了什么吗?

.net c# guid .net-3.5

46
推荐指数
2
解决办法
1万
查看次数

使用批处理文件在Windows中生成GUID

如何在Windows中使用命令行运行的批处理文件中生成GUID?

command-line cmd guid batch-file

46
推荐指数
7
解决办法
6万
查看次数

为什么Guid.ToByteArray()按照它的方式排序字节?

当您ToByteArray()在.NET中调用GUID时,结果数组中的字节顺序与GUID的字符串表示形式相比不是您所期望的.例如,对于以下表示为字符串的GUID:

11223344-5566-7788-9900-aabbccddeeff
Run Code Online (Sandbox Code Playgroud)

结果ToByteArray()是这样的:

44, 33, 22, 11, 66, 55, 88, 77, 99, 00, AA, BB, CC, DD, EE, FF
Run Code Online (Sandbox Code Playgroud)

请注意,前四个字节的顺序是相反的.字节4和5也交换,字节6和7交换.但是最后的8个字节的顺序与它们在字符串中表示的顺序相同.

我知道这种情况正在发生.我想知道的是.NET为什么会这样处理它.

作为参考,您可以在此处此处看到一些关于此的讨论和混淆(不正确归因于Oracle数据库).

.net c# guid

46
推荐指数
1
解决办法
1万
查看次数

guid到base64,用于URL

问题:有更好的方法吗?

VB.Net

Function GuidToBase64(ByVal guid As Guid) As String
    Return Convert.ToBase64String(guid.ToByteArray).Replace("/", "-").Replace("+", "_").Replace("=", "")
End Function

Function Base64ToGuid(ByVal base64 As String) As Guid
    Dim guid As Guid
    base64 = base64.Replace("-", "/").Replace("_", "+") & "=="

    Try
        guid = New Guid(Convert.FromBase64String(base64))
    Catch ex As Exception
        Throw New Exception("Bad Base64 conversion to GUID", ex)
    End Try

    Return guid
End Function
Run Code Online (Sandbox Code Playgroud)

C#

public string GuidToBase64(Guid guid)
{
    return Convert.ToBase64String(guid.ToByteArray()).Replace("/", "-").Replace("+", "_").Replace("=", "");
}

public Guid Base64ToGuid(string base64)
{
   Guid guid = default(Guid);
   base64 = …
Run Code Online (Sandbox Code Playgroud)

.net c# vb.net base64 guid

45
推荐指数
3
解决办法
3万
查看次数

顺序Guid发生器

有没有办法获得Sql Server 2005+ Sequential Guid生成器的功能,而无需插入记录来回读往返或调用本机win dll调用?我看到有人回答使用rpcrt4.dll,但我不确定是否可以从我的托管环境中进行生产.

编辑:使用@John Boker的答案我试图把它变成GuidComb生成器的更多,而不是依赖于最后生成的Guid而不是重新开始.对于种子,而不是从我使用的Guid.Empty开始

public SequentialGuid()
{
    var tempGuid = Guid.NewGuid();
    var bytes = tempGuid.ToByteArray();
    var time = DateTime.Now;
    bytes[3] = (byte) time.Year;
    bytes[2] = (byte) time.Month;
    bytes[1] = (byte) time.Day;
    bytes[0] = (byte) time.Hour;
    bytes[5] = (byte) time.Minute;
    bytes[4] = (byte) time.Second;
    CurrentGuid = new Guid(bytes);
}
Run Code Online (Sandbox Code Playgroud)

我根据评论做了这个

// 3 - the least significant byte in Guid ByteArray 
        [for SQL Server ORDER BY clause]
// 10 - the most significant byte in Guid ByteArray …
Run Code Online (Sandbox Code Playgroud)

c# guid sequence

45
推荐指数
5
解决办法
4万
查看次数

如何在Excel中生成GUID?

我有一个excel文件,每行有一个订单,我希望每个订单都有一个唯一的标识符,因此会有一个唯一ID列.每次我填写一行,我希望Excel为我自动填充唯一ID列.我做了一些研究,并指出了GUID的方向.我找到了以下代码:

Function GenGuid() As String
Dim TypeLib As Object
Dim Guid As String
Set TypeLib = CreateObject("Scriptlet.TypeLib")
Guid = TypeLib.Guid
' format is {24DD18D4-C902-497F-A64B-28B2FA741661}
Guid = Replace(Guid, "{", "")
Guid = Replace(Guid, "}", "")
Guid = Replace(Guid, "-", "")
GenGuid = Guid
End Function
Run Code Online (Sandbox Code Playgroud)

但我不确定如何实现它.任何帮助将不胜感激.先感谢您.

excel vba guid excel-vba

44
推荐指数
5
解决办法
7万
查看次数

System.Guid.NewGuid()是如何随机的?(拿两个)

在您开始将其标记为重复之前,请将我读出来.另一个问题是(很可能)不正确的接受答案.

我不知道.NET如何生成其GUID,可能只有微软这样做,但它很有可能只是调用CoCreateGuid().但是,该函数被记录为调用UuidCreate().并且用于创建UUID的算法已被很好地记录.

长话短说,尽管如此,似乎System.Guid.NewGuid()确实使用了版本4 UUID生成算法,因为它生成的所有GUID都符合标准(参见自己,我尝试了几百万个GUID,它们都匹配).

换句话说,除了一些已知位之外,这些GUID 几乎是随机的.

这再次提出了一个问题 - 随机如何随机的?正如每个优秀的小程序员都知道的那样,伪随机数算法只与其种子(即熵)一样随机.那么种子是UuidCreate()什么?PRNG如何重新播种?它是加密强大的,或者如果两台计算机同时意外呼叫System.Guid.NewGuid(),我可以期望相同的GUID开始倾泻吗?如果收集到足够多的顺序生成的GUID,是否可以猜测PRNG的状态?

补充:为了澄清,我想知道我可以信任的随机性因此 - 我在哪里可以使用它.那么,让我们在这里建立一个粗略的"随机性"量表:

  1. 基本随机性,以当前时间为种子.可以在纸牌中使用洗牌,但是即使没有尝试也很容易碰到碰撞.
  2. 更高级的随机性,不仅使用时间,还使用其他机器特定的种子因子.也许在系统启动时也只播种一次.这可用于在DB中生成ID,因为不太可能重复.尽管如此,它对安全性并不好,因为可以用足够的努力预测结果.
  3. 密码随机,使用设备噪声或其他先进的种子随机源.每次调用或至少经常重新播种.可用于会话ID,分发给不受信任的各方等.

我在想到是否可以将它们用作数据库ID时,以及Guid.comb算法的实现System.Guid.NewGuid()(如NHibernate的实现方式)是否有缺陷,我就来到了这个问题.

.net random guid

43
推荐指数
4
解决办法
1万
查看次数

如何生成.NET 4 GUID?

我知道这里有很多问题以及雷蒙德的优秀(通常)帖子.但是,由于创建GUID的算法明显改变,我发现很难掌握任何最新信息.在MSDN似乎试图提供尽可能少的信息成为可能.

有关如何在.NET 4中生成GUID的已知信息?改变了什么,它如何影响安全性("随机性")和完整性("唯一性")?

我感兴趣的一个特定方面:在v1中,由于涉及时间戳和计数器,似乎几乎不可能在单个机器上再次生成相同的GUID.在v4中,情况不再如此(我被告知),因此在一台机器上获得相同GUID的机会增加了

.net guid .net-4.0

43
推荐指数
2
解决办法
2万
查看次数

"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"在WebSocket协议中的含义是什么

我不理解RFC 6455中"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"的含义.为什么服务器需要这个神奇的字符串?为什么WebSocket协议需要这种机制?

guid magic-string websocket

43
推荐指数
3
解决办法
9841
查看次数