我们在数据库设计中广泛使用GUID; 业务对象属性Guid.Empty为DB空值提供GUID,如果值为,null则始终保存到数据库Guid.Empty.
除了Guid.Empty(00000000-0000-0000-0000-000000000000)有多少可能使用所有相同的字符e生成GUID.G.:11111111-1111-1111-1111-111111111111
只考虑将这些GUID用于特定值.
我刚刚编写了这段代码,将GUID转换为字节数组.任何人都可以在其中拍摄任何漏洞或建议更好的东西?
public static byte[] getGuidAsByteArray(){
UUID uuid = UUID.randomUUID();
long longOne = uuid.getMostSignificantBits();
long longTwo = uuid.getLeastSignificantBits();
return new byte[] {
(byte)(longOne >>> 56),
(byte)(longOne >>> 48),
(byte)(longOne >>> 40),
(byte)(longOne >>> 32),
(byte)(longOne >>> 24),
(byte)(longOne >>> 16),
(byte)(longOne >>> 8),
(byte) longOne,
(byte)(longTwo >>> 56),
(byte)(longTwo >>> 48),
(byte)(longTwo >>> 40),
(byte)(longTwo >>> 32),
(byte)(longTwo >>> 24),
(byte)(longTwo >>> 16),
(byte)(longTwo >>> 8),
(byte) longTwo
};
}
Run Code Online (Sandbox Code Playgroud)
在C++中,我记得能够做到这一点,但我想在内存管理方面没有办法在Java中做到这一点吗?:
UUID uuid = UUID.randomUUID();
long[] longArray = new long[2];
longArray[0] …Run Code Online (Sandbox Code Playgroud) 如何将.NET GUID转换为MongoDB ObjectID(在C#中).另外,我可以将它再次转换回ObjectID中的相同GUID吗?
是否有适用于Unix和Windows的命令行工具,它使用相同的算法为两个平台创建GUID?
我有一个.xsd文件,我用它来使用Visual Studio中的xsd.exe工具生成代码.一些类成员是Guids,xsd.exe工具提供2个警告:
命名空间" http://microsoft.com/wsdl/types/ "无法在此架构中引用.未声明类型" http://microsoft.com/wsdl/types/:guid ".
Guid类型被识别,因为生成的C#文件有效且有效.谁知道如何摆脱这些警告?
验证XSD和生成为System.Guid的类成员的正确语法是什么?
我想要清理一些数据,我需要在SQL Server°中找到一些特定的guids(即uniqueidentifiers).
我想出了一个存储过程,它从当前数据库中每个表的每个uniqueidentifier列执行SELECT,并在找到guid时返回结果集.
它使用INFORMATION_SCHEMA视图查找所有基表中的所有uniqueidentifier列(与视图相对).对于每个列,它会发出一个select,返回表的名称和找到它的列.
CREATE PROCEDURE dbo.FindGUID @searchValue uniqueidentifier AS
/*
Search all tables in the database for a guid
6/9/2009: Removed the IF EXISTS to double hit the database
*/
--DECLARE @searchValue uniqueidentifier
--SET @searchValue = '{2A6814B9-8261-452D-A144-13264433864E}'
DECLARE abc CURSOR FOR
SELECT
c.TABLE_NAME, c.COLUMN_NAME
FROM INFORMATION_SCHEMA.Columns c
INNER JOIN INFORMATION_SCHEMA.Tables t
ON c.TABLE_NAME = t.TABLE_NAME
AND t.TABLE_TYPE = 'BASE TABLE'
WHERE DATA_TYPE = 'uniqueidentifier'
DECLARE @tableName varchar(200)
DECLARE @columnName varchar(200)
DECLARE …Run Code Online (Sandbox Code Playgroud) 我有代码用GUID中的空字符串替换短划线.
Replace(System.Guid.NewGuid.ToString, "-", "")
Run Code Online (Sandbox Code Playgroud)
这会消除guid的独特性吗?
也有人可以证实这一点吗?
我们将GUID作为char(32)存储在数据库中.这样可以吗?因为我们有不同时区的国际用户,所以我们担心字符长度可能会超过32个.谢谢.
我的同事和我正在讨论使用哪些方法来自动生成用户ID和发布ID以便在数据库中进行识别:
一个选项使用Random的单个实例,并采用一些有用的参数,因此它可以重用于各种string-gen案例(即从4位数字引脚到20位字母数字id).这是代码:
// This is created once for the lifetime of the server instance
class RandomStringGenerator
{
public const string ALPHANUMERIC_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
public const string ALPHA_CAPS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public const string NUMERIC = "1234567890";
Random rand = new Random();
public string GetRandomString(int length, params char[] chars)
{
string s = "";
for (int i = 0; i < length; i++)
s += chars[rand.Next() % chars.Length];
return s;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择就是使用:
Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)
我们都知道这Guid.NewGuid()可以满足我们的需求,但我宁愿使用自定义方法.它做同样的事情,但有更多的控制.
我的同事认为,由于自定义方法已经自己制作,因此更容易产生碰撞.我承认我并不完全了解Random的实现,但我认为它与Guid.NewGuid()一样随机.自定义方法的典型用法可能是:
RandomStringGenerator …Run Code Online (Sandbox Code Playgroud) 我努力搜索,却无法掌握整个想法.谁能告诉我:
或者至少,请指出一篇解释这些概念的好文章?谢谢!
我想在.NET中创建一个加密安全的GUID(v4).
.NET的Guid.NewGuid()功能不是加密安全的,但.NET确实提供了System.Security.Cryptography.RNGCryptoServiceProvider类.
我希望能够将随机数函数作为委托Guid.NewGuid传递给(或者甚至传递一些提供生成器接口的类),但它看起来并不像默认实现那样.
我可以创建通过使用密码安全GUID System.GUID和System.Security.Cryptography.RNGCryptoServiceProvider在一起?