在C#中剪切GUID并使其像这样的GP-(6CharacterOFGUID)-000001

时间:2015-08-11 07:45:02

标签: c# guid

您好我正在创建一个自动生成的ID,第一个字符串为GP,6个字符为GUID,auto_increment为000001,具体取决于ID。所以它会是这样的

GP-FJISLD-00001

这是我的GUID生成的字符串。它执行32 GUID,当我试图通过搜索主键来查找数据时,这不是很好。

String GUID = System.Guid.NewGuid().ToString().Replace("-", "").ToUpper();
txt_ouput.Text = GUID.ToString();

请帮忙吗?谢谢:D

2 个答案:

答案 0 :(得分:1)

您是否尝试过使用伪随机函数的string.Substring方法?

int id = yourId;
int pseudoRandomizerStart = (yourId % 32) - 1; //32 is the length of a Guid, -1 to make sure it lands on the correct index.
string firstSixGuidChars = GUID.Substring(pseudoRandomizerStart, pseudoRandomizerStart + 5); //this is based on index.
string idString = id.ToString();

//Hypothetically, you want your id to be, at minimum 6 digits long, 
//with preceding 0s if the number is less than 6 digits 
//and the whole number if it's more than 6 digits.
if(idString.Length < 6){
idString = "000000" + idString;
idString = idString.Substring(idString.Length - 6);
}

因此理论上,id 00001将生成Guid的前六个字符,00002将生成Guid的索引1到6,依此类推。如果您的ID是唯一的,则应始终返回唯一的密钥。

然后它将获得你的id,根据你的需要在它之前追加零,然后向你返回一个六位数id(如果数字小于6位,则返回零。)

这和你的例子的唯一问题是Guid返回32个十六进制数字,因此我不能保证Guid将返回一个全字母部分(基于你的例子)。

答案 1 :(得分:1)

通过仅取GUID的前六个字符,我会对这将是多么独特有所保留......

听起来像你在这里尝试做的是拥有一个复合键,包括Type,ID和SequenceNumber。

我的建议是仅基于ID(完整的guid)实现主键,然后在非聚集索引上使用其他字段。