这些行ID是如何生成的

时间:2014-01-08 17:17:39

标签: sql sql-server algorithm encryption

我正在试图弄清楚如何在应用程序级别生成主键(ISV我没有代码库)所以我可以在后端执行一致的插入而不必担心重复密钥。

通过ID订购只是为了了解进展情况:

修改

使用相应ID创建的日期

起点。:

date         sysid              c_time
02/10/2009  A00029BC75ECF751    1835010
02/10/2009  A00059BC76712863    1835013
02/10/2009  A00069BC7BF6F327    1835014
08/14/2013  A0006A235AF21680    5841653
02/10/2009  A00099BC76D57865    1835017
07/06/2009  A000A9C590BDF134    4000288
02/10/2009  A000B9BC73594306    1835019
08/19/2009  A000D9C857013579    4795995
02/10/2009  A000E9BC7222D209    1835022
04/08/2009  A000E9C0007D0727    4810168

...

结束

date         sysid              c_time
10/06/2010  AFFFA9E2205D9752    5919265
01/29/2013  AFFFCA1706413272    3420395
02/10/2009  AFFFD9BC75264250    1835005
07/13/2009  AFFFD9C60B25C732    4402146
11/09/2012  AFFFDA11FBC8C706    5908518
07/17/2009  AFFFE9C64E1EB645    540642
09/30/2010  AFFFE9E1C7021704    3264751
02/10/2009  AFFFF9BC755DE457    1835008

我认为这是日期时间的一些算法,A作为前缀?

有人有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  

我正在试图弄清楚如何生成主键...所以我可以在后端执行一致的插入而不必担心重复密钥。

嗯,没有算法或源代码是不可能的,但时间戳似乎是合理的,因为序列ID之间的数字差异在顶部和底部集之间是相同的数量级。

由于它们看起来像64位十六进制数字,所以可以只将“1”添加到“最高”数字。但是,不能保证第三方应用程序也在检查重复项 - 它可能会插入一个与您输入的值相冲突的值。

假设它们的插入是顺序的(并且您的插入不需要是顺序的),您可以从FFFFFFFFFFFFFFFF开始并向后工作。

还有一些变量你需要考虑 - 是第一个3/4位(1010 = A)标志?在第二位插入一个值是否会造成任何伤害?通过查看生成的ID,这些问题都无法解决。

但是,您尝试的任何内容都应该使用ISV进行验证。