您好我正在创建一个自动生成的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
答案 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)实现主键,然后在非聚集索引上使用其他字段。